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

          大多數情況下,轉換框架通過ClassDescriptor和FieldDescriptor來描述轉換時所需要的信息。

          二、 轉換框架
          轉換框架中最主要的兩個類是:org.exolab.castor.xml.Marshaller和org.exolab.castor.xml.Unmarshaller

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

          上面的這種轉換方式,只適合于按照默認方式進行轉化,如果要使用映射文件,需要采用以下方式。
          marshal:
          Mapping mapping = new Mapping();
          mapping.loadMapping(“mapping.xml”);
          Marshaller marshaller = new Marshaller(writer);
          marshaller.setMapping(mapping);
          marshaller.marshal(obj);
          Marshaller的5個marshal方法中,只有marshal(Object obj)這個方法不是靜態的,其他的四個都是靜態的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作為構造Unmarshaller的參數
          unm.setMapping(mapping);
          Person person = (Person)unm.unmarshal(reader);
          Unmarshaller中,object可以從reader中轉換而來,也可以從source、node轉換而來,靜態方法均是兩個參數,非靜態方法都是一個來源作為參數。

          三、 使用存在的Class和對象
          Castor幾乎可以將任何對象和XML進行轉換。當指定class的描述文件不存在時,轉換框架使用默認的reflection機制來獲得對象的信息。

          轉化對象存在的主要約束是:
          這些class必須有一個public而且default的構造函數;必須有adequate get/set方法。

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

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

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

          使用”default introspection”機制必須為每一個要轉換的field配備對應的get/set方法;
          如果沒有get/set方法,但是是public的field,也可以以direct field access的方式被轉換;
          但是如果一個類中為有的成員定義了get/set方法,即使其他成員是public的,也不會被轉換;
          自動內省機制是自動觸發的。可以通過castor.properties文件控制自動轉換的特性,比如改變名稱轉換、基本型別是轉換為attribute還是element等。

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

          posted on 2007-09-14 10:18 閱讀(1252) 評論(0)  編輯  收藏 所屬分類: 框架相關
          主站蜘蛛池模板: 黄骅市| 沿河| 区。| 和平区| 中江县| 合水县| 大名县| 濮阳市| 咸丰县| 崇义县| 泰来县| 大石桥市| 竹北市| 千阳县| 金寨县| 清涧县| 临朐县| 青河县| 神农架林区| 兴业县| 宁化县| 南岸区| 东丽区| 仙游县| 盐源县| 乌鲁木齐市| 成武县| 新安县| 龙里县| 大埔区| 社会| 和静县| 新巴尔虎右旗| 潮州市| 济源市| 桓台县| 建阳市| 奉化市| 彰化市| 武功县| 犍为县|