浅析Castor数据绑定二

 

二、建立XML数据绑定的方法

       Castor建立数据绑定的方法有两种,一种是生成类,另一种的映射文件。

       1、生成类。Castor通过org.xml.castor.xml.SourceGenerator处理类的生成。首先,我们要用XML Schema来建立一套模型,用以表示JAVA对象的数据结构。做个简单的例子,前面Alarm.java类似的数据结构用XML Schema来表示为:

 

       Alarm.xsd

       <?xml version="1.0" encoding="GB2312"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"

              targetNamespace="http://castor.test.raistlin.com">

      

              <xsd:annotation>

                     <xsd:documentation>Alarm 对象XML Schema文件.</xsd:documentation>

              </xsd:annotation>

      

              <xsd:element name="alarm">

                     <xsd:complexType>

                            <xsd:sequence>

                                   <xsd:element name="alarmType" type="xsd:string"/>

                                   <xsd:element name="detailContent" type="xsd:string"/>

                            </xsd:sequence>

                     </xsd:complexType>

              </xsd:element>

      

</xsd:schema>

 

       有了Schema文件,下面要做的是执行命令:

 

       java -classpath lib/castor-0.9.9.1.jar;lib/xerces-J_1.4.0.jar;lib/jakarta-regexp-1.1.jar  org.exolab.castor.builder.SourceGenerator -i d:\Alarm.xsd -package com.raistlin.test.castor -dest alarm -types j2

 

       其中常用参数说明如下:

       -i 指定XML Schema文件;

       -package 指定生成类的包名;

       -dest 指定成生类源文件存放路径;

       -verbost 显示类生成过程中的额外信息;

       -nodesc 不生成类的Descriptor文件;

       -types 生成类中的集合类型,j2java2java.util.List类型;

       -nomarshall 生成类不包括marshal()方法;

 

       执行完毕后,在alarm目录就会按包路径建立目录结构,同时会产生Alarm.javaAlarmDescriptor.java两个JAVA文件。其中Alarm.java包含所有属性的访问和转变方法;AlarmDescriptor.java包含了命名空间信息、验证方法等。有了这两个文件,生成类过程就算完成了,已经准备好正确的实现XML数据的转化的条件。具体生成的源文件可以自己试着生成后看一下,这里不再列出。项目中基础平台的数据字典和查询框架模型就使用了这种方法,有兴趣可以学习一下配置库上的源码。

 

       2、映射文件。如果项目在决定使用Castor前已经实现过了实体类的设计,但是现在又需要进行XML数据绑定。这时,可以使用映射文件的方式来手工指定XML数据与JAVA对象属性之间的映射关系,并以定义的关系为规则,完成XML数据与JAVA对象之间的转化。

       对于Alarm.java可以编写映射文件如下:

 

       AlarmMapping.xml

       <?xml version="1.0"?>

 

<mapping>

              <class name="com.raistlin.test.castor.Alarm">

                     <map-to xml="alarm"/>

                     <field name="alarmType" type="string">

                            <bind-xml name="alarmType"/>

                     </field>

                     <field name="detailContent" type="string">

                            <bind-xml name="detailContent"/>

                     </field>

              </class>

</mapping>

 

       文件通过class指定xml根元素对应的JAVA类,然后依次指定XML中各元素对应JAVA类中的哪个字段,以及数据类型(Castor也支持自定义类型)。这样就手工完成了XML数据与JAVA对象之间的绑定映射。但是在实践中,如果开始定义的JAVA类的数据类型不被Castor支持,在执行映射时会抛出异常,数据不能被正常转化(比如java.sql.Timestampjava.util.Calendar等)。所以定义对象时,尽量使用简单常用的数据类型。

 

你可能感兴趣的:(java,数据结构,sql,xml,框架)