Castor學習筆記一 -- 使用Castor XML收藏

 一. 使用CastorXML
1.簡介
DOM和SAX都是從結構的角度處理XML文檔,Castor通過對象的方式來處理。

Castor幾乎能將任何“bean-like”的Java對象在XML之間進行轉換。大多數情況下,轉換框架使用一組類描述符(ClassDescriptor)和字段描述符(FieldDescriptor)來描述如何來進行編組和解組

2.編組框架
編組:org.exolab.castor.xml.Marshaller
解組:org.exolab.castor.xml.Unmarshaller
Person類:
import java.util.Date;
public class Person implements java.io.Serializable {
   private String name = null;
   private Date dob = null;
   public Person() {super();}
   public Person(String name) {this.name  = name;}
   public Date getDateOfBirth() {return dob;}
   public String getName() {return name;}
   public void setDateOfBirth(Date dob) {this.dob = dob;}
   public void setName(String name) {this.name = name;}
}
編組代碼示例:
   Person person = new Person("Ryan 'Mad Dog' Madden");
   person.setDateOfBirth(new Date(1955, 8, 15));
   Writer writer = new FileWriter("test.xml");
   Marshaller.marshal(person, writer);
解組代碼示例:
   Reader reader = new FileReader("test.xml");
   Person person = (Person)Unmarshaller.unmarshal(Person.class, reader);
注:
marshall和unmarshall均需拋出ValidationException和MarshallException異常

上面是使用靜態方法調用Castor的例子,這種情況下映射配置文件會被忽略,如果需要使用配置文件,應使用下面的方式:
   Mapping mapping = new Mapping();
   mapping.loadMapping("mapping.xml");
  
//解組時
   Reader reader = new FileReader("test.xml");
   Unmarshaller unmarshaller = new Unmarshaller(Person.class);
   unmarshaller.setMapping(mapping);
   Person person = (Person)unmarshaller.unmarshal(reader);
  
   //編組時
   Writer writer = new FileWriter("test2.xml");
   Marshaller marshaller = new Marshaller(writer);
   marshaller.setMapping(mapping);
   marshaller.marshal(person);

3.使用已存在的類和對象
當指定類的描述符不可用的時候,轉換框架使用映射(reflection)來獲得對象的信息

對象在內存種的描述符被Castor保存爲Java源文件,一邊可以通過很小的代價修改和編譯。(考慮修改其描述符源代碼的應用

編組對象有一個條件:這些類必須有一個公共的默認構造函數(Public default constructor)和適當的get/set方法
4.類描述符(Class Descriptors)
類描述符提供Class被合適轉換的必須信息。這些Descriptor能在JDO和XML框架種共享。

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

com.exolab.castor.mapping.ClassDescriptor接口
org.exolab.castor.xml.XMLClassDescriptor接口繼承上述接口
org.exolab.castor.types.BaseDescriptor類實現上述接口

XML Class Descriptor一般由四種主要的方式創建。兩種在運行時,兩種編譯時
4.1 編譯時描述符(Compile-Time Descriptors)
要被描述的類每一個均實現org.exolab.castor.xml.XMLClassDescriptor或者由Source Code Generator獲得合適的描述符

主要優點:速度快
4.2 運行時描述符(Run-Time Descriptors)
要使用運行時描述符,可以僅僅只讓Castor內省改類,或者提供一個映射文件,或者既內省又提供映射文件

要是“默認的內省機制”能夠工作,class中要被編組解組的field必須有get/set方法,或者是public成員變量。

無需手工設置“default introspection”,如果一個class的描述符不能被找到,內省將自動發生

可以通過castor.propertises文件類配置內省規則。比如感便名稱約定、基本型的字段是被作爲屬性還是元素對待等等。

映射文件也可以用來被描述要被編組解組的類。映射在編組解組之前被加載。org.exolab.castor.mapping.Mapping。

run-time descriptor的優點:要做的事情很少

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章