java castor_利用Castor自动生成java文件

1、编写schema文件,例如:c:\castor\test.xsd。

2、到http://www.castor.org/网站下载castor-xml.jar(本文使用的是0.9.4版本)及编译所要引用的xerces-2.4.0.jar、xercesImpl.jar(http://www.apache.org/)文件。

3、执行以下脚本生成java文件:

java -classpath C:\castor\lib\castor-xml.jar;C:\castor\lib\xerces-2.4.0.jar;C:\castor\lib\xercesImpl.jar;. org.exolab.castor.builder.SourceGenerator -i test.xsd -package com.test.config.vo

4、生成的java文件中自动含包了unmarshal(通过XML文件生成java对象)和marshal(通过java对象生成xml文件)的两个方法。

5、marshal(通过java对象生成xml文件)方法代码如下:

public void marshal(java.io.Writer out)

throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException

{

Marshaller.marshal(this, out);

} //-- void marshal(java.io.Writer)

有时为了解决中文问题,我们需要自已实现该方法:

public void write2XML(String filename) throws IOException, MarshalException, ValidationException

{

//解决中文问题

FileOutputStream fos = new FileOutputStream(new File(filename));

OutputStreamWriter fw = new OutputStreamWriter(fos, "gb2312");

Marshaller ma = new Marshaller(fw);

ma.setEncoding("gb2312");

ma.marshal(wholeMsg);

}

6、unmarshal(通过XML文件生成java对象)方法代码如下:

public static com.test.config.vo.Test unmarshal(java.io.Reader reader)

throws org.exolab.castor.xml.MarshalException, org.exolab.castor.xml.ValidationException

{

return (com.test.config.vo.Test) Unmarshaller.unmarshal(com.test.config.vo.Test.class, reader);

} //-- com.test.config.vo.Test unmarshal(java.io.Reader)

由于生成的类可能比较多,我们可以采用一个统一的java类来控制他们:

private static Object createXMLObject(Class parserClass, Reader read)

{

Object obj = null;

try

{

Method method = parserClass.getMethod("unmarshal", new Class[]{Reader.class});

obj = method.invoke(parserClass, new Object[]{read});

}

catch (SecurityException e)

{

_log.error("在获取" + parserClass.getName() + "类的unmarshal方法时引发安全性异常!", e);

}

catch (NoSuchMethodException e)

{

_log.error("无法获取" + parserClass.getName() + "类的unmarshal方法!", e);

}

catch (IllegalArgumentException e)

{

_log.error("在调用" + parserClass.getName() + "类的unmarshal方法时出现异常!", e);

}

catch (IllegalAccessException e)

{

_log.error("在调用" + parserClass.getName() + "类的unmarshal方法时出现异常!", e);

}

catch (InvocationTargetException e)

{

_log.error("在调用" + parserClass.getName() + "类的unmarshal方法时出现异常!", e);

}

return obj;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值