快速业务通道

从XML到Java代码的数据绑定之四 从无用的字符到有用的代码段 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
try point for marshalling an object into * an XML instance document. * </p> * * @param obj <code>Object</code> to convert to XML. * @param out <code>OutputStream</code> to write XML to. * @throws <code>IOException</code> when errors in output occur. */ public static void marshall(Object obj, OutputStream out) throws IOException { Marshaller marshaller = new Marshaller(); marshaller.writeXMLRepresentation(obj, out); }

看上去很简单,是吗?很好。除了文章中的这个和其它代码片段,还可以 下载完整的 Marshaller 类 ,并 查看 HTML 格式的类 。

一旦内部创建了 Marshaller类的实例,提供给静态方法的变量就传递到同一方法的动态版本。因为我已经让所提供的流写入结果,所以不需要返回值。建造了前门之后,就该研究房子的其余部分了。

从XML到Java代码的数据绑定之四 从无用的字符到有用的代码段(2)

时间:2010-12-02

声明 XML 模式无关性

就象我以前提到过的,不能依赖 XML 模式或任何插到 Java 类中的方法来简化从 Java 到 XML 的转换。相反,我们必须从 Java 类中的数据手工创建 XML 文档。但是,这种决定非常重大的副作用是您可能采用 任何 符合 JavaBean 式样格式的 Java 类来生成 XML 表示。我说 JavaBean 式样 是因为不必实现 JavaBean 接口,但对于类,希望它对接口的所有数据具有读方法。例如,如果类有一个名为 name 的字段,则希望有一个返回该值的方法 getName。任何没有象这样的读方法的数据字段都将导致在打包过程中忽略该数据。

强制了这种简单的约束(并且这是标准编程惯例)之后,就可以将任何 Java 对象转换成 XML。这还允许来回转换 XML 数据。XML 文档可以转换成 Java 实例,然后再转换回 XML。但是,有一个告诫:原始 XML 模式声明会丢失!请记住,这就是我们的 Java 打包过程不依赖 XML 模式的副作用。打包得到的 XML 输出完全不知道任何约束 XML 的 XML 模式。再次将 XML 解包成 Java 时,这不会引起问题,因为类路径中只需要包含必须创建其新实例的表示对象的类。您可以回过去看一下第三部分,我在解包过程中没有使用 XML 模式。因此,将 XML 转换成 Java,再转换回 XML 并不会发生问题,只是会丢失模式约束。当然,本系列中的所有代码都是开放源码,因此如果您的应用程序中需要这个功能,欢迎您将此功能添加到应用程序中。

然后,主方法比较简单。它接受一个对象,应该返回该对象的 XML 元素表示。如果对象包含对其它 Java 对象的引用,那么可以使用相同的方法进行递归,并将一个“子”元素添加到顶级元素。这个最终元素被返回到调用方法,并输出到所提供的流。(我将在下一节中讨论此最终方法。)因为 XML 的 JDOM 表示易于操作代码,所以仍使用它。清单 2 中显示了这个核心方法。

清单 2. 将 Java 对象转换成 XML 的核心方法 /** * <p> * This is the granular portion of binding; a Java <code>Object</code> is * converted into an XML element (in JDOM form), using recursion for any * children. * </p> * * @param obj <code>Object</code> to get the XML element representation for. * @return <code>Element</code> - representation of <code>Object</code> in XML. * @throws <code>IOException</code> when errors occur in binding. */ private Element getXMLRepresentation(Object obj) throws IOException { Class objectClass = obj.getClass(); // Get the name of the element for this ob

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号