一. 使用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的優點:要做的事情很少
Castor學習筆記一 -- 使用Castor XML收藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.