隨筆-0  評(píng)論-3  文章-28  trackbacks-0
          一、 簡介
          Castor XML是一種XML數(shù)據(jù)綁定框架。
          XML的另外兩種主要API:DOM和SAX(Document Object Model和Simple API for XML),主要是從結(jié)構(gòu)的角度去處理XML文件,而Castor XML是以對(duì)象的模式去處理XML文檔中的數(shù)據(jù)

          大多數(shù)情況下,轉(zhuǎn)換框架通過ClassDescriptor和FieldDescriptor來描述轉(zhuǎn)換時(shí)所需要的信息。

          二、 轉(zhuǎn)換框架
          轉(zhuǎn)換框架中最主要的兩個(gè)類是:org.exolab.castor.xml.Marshaller和org.exolab.castor.xml.Unmarshaller

          marshal: Marshaller.marshal(obj,writer);
          unmarshal: Unmarshaller.unmarshal(Person.class,reader);

          上面的這種轉(zhuǎn)換方式,只適合于按照默認(rèn)方式進(jìn)行轉(zhuǎn)化,如果要使用映射文件,需要采用以下方式。
          marshal:
          Mapping mapping = new Mapping();
          mapping.loadMapping(“mapping.xml”);
          Marshaller marshaller = new Marshaller(writer);
          marshaller.setMapping(mapping);
          marshaller.marshal(obj);
          Marshaller的5個(gè)marshal方法中,只有marshal(Object obj)這個(gè)方法不是靜態(tài)的,其他的四個(gè)都是靜態(tài)的marshal(obj,writer), marshal(obj,handler), marshal(obj,node)

          unmarshal:
          Mapping mapping = new Mapping();
          mapping .loadMapping(“mapping.xml”);
          Unmarshaller unm = new Unmarshaller(“Person.class”);//使用Person.class作為構(gòu)造Unmarshaller的參數(shù)
          unm.setMapping(mapping);
          Person person = (Person)unm.unmarshal(reader);
          Unmarshaller中,object可以從reader中轉(zhuǎn)換而來,也可以從source、node轉(zhuǎn)換而來,靜態(tài)方法均是兩個(gè)參數(shù),非靜態(tài)方法都是一個(gè)來源作為參數(shù)。

          三、 使用存在的Class和對(duì)象
          Castor幾乎可以將任何對(duì)象和XML進(jìn)行轉(zhuǎn)換。當(dāng)指定class的描述文件不存在時(shí),轉(zhuǎn)換框架使用默認(rèn)的reflection機(jī)制來獲得對(duì)象的信息。

          轉(zhuǎn)化對(duì)象存在的主要約束是:
          這些class必須有一個(gè)public而且default的構(gòu)造函數(shù);必須有adequate get/set方法。

          四、 類描述符(ClassDescriptor)
          org.exolab.castor.xml.XMLClassDescriptor
          類描述符提供轉(zhuǎn)換時(shí)所需的必要信息。ClassDescriptor不僅可以用于Castor XML,還可以用于Castor JDO

          類描述符包括一組字段描述符(FieldDescriptor)

          類描述符通常情況下有四種創(chuàng)建方式,兩種在編譯時(shí)(效率較高),兩種在運(yùn)行時(shí)(較為方便)
          編譯時(shí)描述符:
          1. 讓需要被describe的類實(shí)現(xiàn)org.exolab.castor.xml.XMLClassDescriptor接口
          2. 使用Source Code Generator創(chuàng)建合適的descriptor
          運(yùn)行時(shí)描述符:
          3. 默認(rèn),使用Castor的introspect機(jī)制
          4. 提供mapping文件,或者默認(rèn)和配置文件并用

          使用”default introspection”機(jī)制必須為每一個(gè)要轉(zhuǎn)換的field配備對(duì)應(yīng)的get/set方法;
          如果沒有g(shù)et/set方法,但是是public的field,也可以以direct field access的方式被轉(zhuǎn)換;
          但是如果一個(gè)類中為有的成員定義了get/set方法,即使其他成員是public的,也不會(huì)被轉(zhuǎn)換;
          自動(dòng)內(nèi)省機(jī)制是自動(dòng)觸發(fā)的。可以通過castor.properties文件控制自動(dòng)轉(zhuǎn)換的特性,比如改變名稱轉(zhuǎn)換、基本型別是轉(zhuǎn)換為attribute還是element等。

          Mapping文件也可以用來描述要被轉(zhuǎn)換的類。mapping的裝載發(fā)生在marshal和unmarshal之前(org.exolab.castor.mapping.Mapping)

          posted on 2007-09-14 10:18 閱讀(1257) 評(píng)論(0)  編輯  收藏 所屬分類: 框架相關(guān)

          只有注冊用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 邛崃市| 鄂州市| 高尔夫| 仙桃市| 黄浦区| 丰原市| 中牟县| 雅安市| 湟中县| 前郭尔| 凉山| 闽清县| 平南县| 夹江县| 昭平县| 兴文县| 文成县| 石家庄市| 西青区| 罗江县| 岳西县| 平遥县| 垫江县| 光山县| 西青区| 南昌县| 策勒县| 公安县| 灌云县| 六盘水市| 东山县| 布拖县| 四子王旗| 肇庆市| 新和县| 麟游县| 渭源县| 班戈县| 天峨县| 仙游县| 健康|