一、 簡介
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
煒 閱讀(1251)
評論(0) 編輯 收藏 所屬分類:
框架相關