castor: java对象与xml间的转换
2008-10-30 10:33
说明:交换数据时,可以考虑使用castor,把Java对象的转换成xml 进行远程传递【代替序列化】
    参考中说:castor和xmlbeans这种都是先定义schema,然后根据schema来generate java class,然后调用marshall和unmarshall方法来序列化javabean。这是属于重量级的方法,虽然功能强大,使用却不方便。如果你改了schema,势必要重新generate,这样你就不能在generate的java class上加上自己的方法。导致生成的java class纯粹用于serializejava xml是什么
使用过程:
1. 根据应用逻辑, 编写xml schema文件。示例如下:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="/2001/XMLSchema"
targetNamespace="dhgate/Test/ProductPromotionAd">
  <xs:element name="ProductPromotionAdResultItem">
        <xs:complexType>
        <xs:sequence>
              <xs:element name="itemcode" type="xs:string"/>
              <xs:element name="hasPromotionAd" type="xs:boolean"/>
          </xs:sequence>
      </xs:complexType>
    </xs:element>
     
  <xs:element name="ProductPromotionAdResults"> 
      <xs:complexType>
          <xs:sequence>
            <xs:element ref="ProductPromotionAdResultItem" maxOccurs="unbounded" minOccurs="1"/>       
        </xs:sequence>
      </xs:complexType>
  </xs:element>
</xs:schema>
2.castor 根据xml schema 生成JavaBean;编写类似的脚本如下:
@echo off
REM Change the following line to set your JDK path
set JAVA_HOME=%JAVA_HOME%
set JAVA=%JAVA_HOME%\bin\java
set JAVAC=%JAVA_HOME%\bin\javac
@echo Create the classpath
set CP=.
for %%i in (..\..\..\lib\*.jar) do set CP=%CP%;%%i
set CP=%CP%;..\..\..\build\classes;%JDK_BIN%\lib\tools.jar
@echo.
@echo Using classpath: %CP%
@echo Castor Test Cases
@echo.
@echo
@rem Java 2 style collection types
@rem %JAVA% lab.castor.builder.SourceGeneratorMain -i productPromotionAd.xsd -f -types j2
@rem Java 1.1 collection types
%JAVA% -cp %CP% lab.castor.builder.SourceGeneratorMain -i productPromotionAd.xsd -f
或者利用ant生成,其代码段示例为:

<target name="generateCastorClasses" depends=".">
<java classname="lab.castor.builder.SourceGenerator">
<arg line="-dest '${dir}/source' -i '${dir}/config/Export.xsd' -f -package com.object" />
<classpath>
<fileset dir="${dir}/lib">
<include name="*.jar" />
</fileset>
</classpath>
</java>
</target>
3. 客户服务器端使用JavaBean, 传输时, 服务器端把JavaBean Marshall 成xml, 客户端把xml unmarshall成 JavaBean
测试代码如下:
public class TestCastorXml{
    private static void readTest() {
        try {
           
            ProductPromotionAdResults readXml = ProductPromotionAdResults.unmarshal(new FileReader("e:\\l"));
            for(int i=0; i&ProductPromotionAdResultItemCount(); i++) {
                System.out.ProductPromotionAdResultItem(i).getItemcode() + "-->" +
                        ProductPromotionAdResultItem(i).getHasPromotionAd());
            }
           
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
   
    private static void writeTest() {
        try {
            Writer w = new FileWriter("e:\\l");
           
            ProductPromotionAdResults resultXml=new ProductPromotionAdResults();
           
            for(int i=0; i<3; i++) {
                ProductPromotionAdResultItem item = new ProductPromotionAdResultItem();
                item.setItemcode(i + "");
                item.setHasPromotionAd(true);
               
                resultXml.addProductPromotionAdResultItem(item);
                System.out.println("write finished");
            }
           
            resultXml.marshal(w);
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
   
    public static void main(String[] args) {
        //writeTest();
        readTest();
    }
}
附录:需要的包
castor-1.2-anttasks.jar
castor-1.2-codegen.jar
castor-1.2-ddlgen.jar
castor-1.2-jdo.jar
castor-1.2-xml-schema.jar
castor-1.2-xml.jar
castor-1.2.jar
commons-collections-3.2.jar
commons-lang-2.1.jar
commons-logging-1.1.jar
derby-10.1.2.1.jar
jdbc-se2.0.jar
jta1.0.1.jar
log4j-1.2.8.jar
velocity-dep-1.5.jar
xerces-J_1.4.0.jar

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。