备注:
Jakarta ORO: 一套文本处理工具,提供JDK5.0兼容的正则表达式,Awk-like正则表达式,glob表达式
Xerces:Apache推动的一项XML文档解析开源项目,有多种语言版本。Java、C++、Perl
SVN:Sub Version 一种版本管理工具
JPA:Java Persistent Architecture。JPA的实现有Oracle的TopLink JPA、JBoss的Hibernate JPA、BEA的OpenJPA等
ORM:对象角色建模(ORM以简单对象和论断的形式描述事实)
一. 使用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的优点:要做的事情很少