用Apache Commons Betwixt2 在XML与Java对象之间相互转换


用ApacheApacheApacheApache CommonsCommonsCommonsCommons Betwixt2Betwixt2Betwixt2Betwixt2 在XML XML XML XML 与Java Java Java Java 对象之间相互转换 如果你需要做 XML 与Java 对象之间相互转换, apache betwixt2是一个不二的选择。 官方主页: [url]http://commons.apache.org/betwixt/[/url] 目前最新版本是 0.8. 以前我用 XStream,但是对比起来还是没 apache betwixt2来得容易。下面给些例子出来。 /** * 测试 Bean */ publicclassPersonBean { private String name; private int age; public PersonBean() { } public PersonBean(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return "PersonBean{" + "name='" + name + '\'' + ", age=" + age + '}'; } } importjava.io.StringReader; importorg.apache.commons.betwixt.io.BeanReader; /** * XML 转Java */ publicclassReadExampleApp { public static final void main(String args[]) throws Exception { //创建一个读取 xml 文件的流 StringReader xmlReader = new StringReader( "25James Smith"); //创建一个 BeanReader 实例,相当于转换器 BeanReader beanReader = new BeanReader(); //配置 BeanReader 实例 beanReader.getXMLIntrospector().getConfiguration().setAttributes ForPrimitives(false); beanReader.getBindingConfiguration().setMapIDs(false);//不自动 生成 ID //注册要转换对象的类,并指定根节点名称 beanReader.registerBeanClass("person", PersonBean.class); //将XML 解析 Java Object PersonBean person = (PersonBean) beanReader.parse(xmlReade r); //在控制台输出对象 System.out.println(person); } } 运行结果: PersonBean{name='James Smith', age=25} Process finished with exit code 0 importbetwixt.Person; importorg.apache.commons.betwixt.io.BeanWriter; importorg.xml.sax.SAXException; importjava.beans.IntrospectionException; importjava.io.FileWriter; importjava.io.IOException; importjava.io.StringWriter; importjava.util.Collection; /** * 将java 对象转换为 xml,并输出到文件 */ publicclassWriteExampleApp { public static final void main(String [] args) throws Exception { //创建一个输出流,将用来输出 Java 转换的 XML 文件 FileWriter outputWriter = new FileWriter("c:\\tttttttttt.txt"); //输出 XML 的文件头 outputWriter.write(""); //创建一个 BeanWriter 实例,并将 BeanWriter 的输出重定向到指定的输 出流 BeanWriter beanWriter = new BeanWriter(outputWriter); //配置 BeanWriter 对象 beanWriter.getXMLIntrospector().getConfiguration().setAttributesF orPrimitives(false); beanWriter.getBindingConfiguration().setMapIDs(false); beanWriter.enablePrettyPrint(); Person person = new Person("阿牛 ", 21); beanWriter.write(person); //关闭输出流 outputWriter.close(); } } 运行结果: Process finished with exit code 0 (在 C盘目录下创建一个名叫 tttttttttt.txt 的文件。 importbetwixt.Person; importorg.apache.commons.betwixt.io.BeanWriter; importjava.io.StringWriter; /** * 将Java 对象转换为 XML,并获取其字符串 * *@author leizhimin 2008-9-18 14:36:49 */ publicclassWriteStringExampleApp { public static final void main(String [] args) throws Exception { String reslutXml; //创建一个输出流,将用来输出 Java 转换的 XML 文件 StringWriter outputWriter = new StringWriter(); //输出 XML 的文件头 outputWriter.write(""); //创建一个 BeanWriter 实例,并将 BeanWriter 的输出重定向到指定的输 出流 BeanWriter beanWriter = new BeanWriter(outputWriter); //配置 BeanWriter 对象 beanWriter.getXMLIntrospector().getConfiguration().setAttributesF orPrimitives(false); beanWriter.getBindingConfiguration().setMapIDs(false); beanWriter.enablePrettyPrint(); Person person = new Person("阿牛 ", 21); beanWriter.write(person); reslutXml = outputWriter.toString(); //关闭输出流 outputWriter.close(); //控制台输出转换结果的字符串 System.out.println(reslutXml); } } 运行结果: 21 阿牛 Process finished with exit code 0 总结: betwixt 功能强大,使用简单,是快速开发不二的选择。 BeanWriter 相当于一个双向转换器工厂,但是这个工厂需要装配,并且它是非线程安全的。 BeanWriter 有很多配置项,可以将对象的成员装配成 xml 元素的属性。也可以改写元素属性 的名字 。默认情况下元素的名字与 java 成员的名字相同 ,根节点与 java 类名相同 (不带包名 )。 并且这些操作是双向可逆的。太牛了吧! BeanWriter 还可以转换格式不规范的 xml 文档,比如节点无法有些不匹配,或者无法完全映 射到对象上的 xml,这些都不会出错,并且当节点为 null 的时候,转换也不用做特殊处理,非 常简单。 BeanWriter 在将 Java 转换为 xml 时, Java 对象可以是复杂对象,对象之中嵌套对象,如果 复杂对象的某个成员比如类型为另外一个对象为 null 时,还可以选择是否在生成 xml 的时候输 出该节点。如果期望输出,则输出一个对应复杂对象成员的子元素,里面的元素值全为空。 这些特性是 XStream 所无法相比的 。有关速度效率的问题 ,还没测试过 。不过一般应用没有发 现问题,除非你的 xml 几百 M。
还剩4页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

jokerlgq

贡献于2011-09-22

下载需要 5 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf