Castor学习笔记一 -- 使用Castor XML

来源:互联网 发布:lr软件安装 编辑:程序博客网 时间:2024/05/16 07:33

备注:

Jakarta ORO 一套文本处理工具,提供JDK5.0兼容的正则表达式,Awk-like正则表达式,glob表达式

XercesApache推动的一项XML文档解析开源项目,有多种语言版本。JavaC++Perl

SVNSub Version 一种版本管理工具

JPAJava Persistent ArchitectureJPA的实现有OracleTopLink JPAJBossHibernate JPABEAOpenJPA

ORM:对象角色建模(ORM以简单对象和论断的形式描述事实)

 

. 使用CastorXML

1.简介

DOMSAX都是从结构的角度处理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);

:

marshallunmarshall均需抛出ValidationExceptionMarshallException异常

 

上面是使用静态方法调用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能在JDOXML框架种共享。

 

类描述符包括一组字段描述符(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的优点:要做的事情很少

 
原创粉丝点击