从XML到Java代码的数据绑定之四 从无用的字符到有效的代码段[Java编程]
本文“从XML到Java代码的数据绑定之四 从无用的字符到有效的代码段[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在本系列的上一部份中,我演示了若何取出 XML 文档并将它转换成 Java 表示.这种变更的关键是 XML 文档符合的 XML 情势.情势不但确保了强迫约束.它还答应利用 SchemaMapper 来生成 Java 类;那么 XML 文档便可以解包成那些类此中一个的实例.换句话说,这个系统不但需求 XML 文档;文档将变成其实例的 Java 类不但必须已经存在,并且它还必须在系统的类途径中.
打包类
打包 Java 实例时,情形稍有差别.首先,Unmarshaller 类不存储关于在所成立的 Java 实例中利用的 XML 情势的信息.因此,从 XML 文档成立的 Java 类的实例与任何别的 Java 类没有本质辨别.最初,这仿佛是一个问题.Java 类将实例转回 XML 能否必须采纳更多的操作?答案是“是”.但是,这倒是功德:从 XML 解包的类完好独立于该 XML 文档.这有以下几个长处:
Java 实例可以解包成差别的 XML 文档.
打包代码不依靠于查找 XML 情势或 XML 文档.
对这个 Java 实例利用反射和别的 Java 办法不会产生不测的字段或办法.
前两点大概是显而易见的,而第三点大概不是.Java 利用程序中正越来越遍及地利用反射,以在运行时处理各种差别范例的对象.普通会查抄字段和办法以肯定若何利用对象.假如要成立附加办法(如 toXML())或附加字段(如 xmlSchema),类会将这些办法返回到查抄它的利用程序.终究后果是别的利用程序代码大概会错误地利用分外用于打包和解包数据的信息.在数据绑定的环境之外,极大概会误用这些办法和字段(或变量).它们乃至会给出不该表露的网络资源(如 XML 情势)的利用程序信息.
恰是由于这些缘由,有必要承认将 Java 打包成 XML 比利用本来的 XML 情势举行打包略有难度.但是,因为有了这个难度,生成的 Java 实例才独立于 XML 文档或情势.假如全部这些令您感到困惑,请按以下方法考虑这个问题:可以将已解包的 Java 对象和已打包的 XML 文档返回给别的利用开辟者,且没必要给出任何特定的用法指令.实际上,他们乃至不知道数据本来是 XML 还是 Java;他们所看到的数据格局只是您供应的格局.
这是一条要记着的重要原则 -- 断绝数据检索办法.那就更简单服从使数据尽大概保持专用的基本指南.比方,关于若何从 XML 文档中获得数据的信息并不合适分发给别的利用开辟者,分外是他们在差别的公司(如在商家对商家利用程序中).
深化研究
我已经报告了一些预备概念,目前该研究代码了.首先,需求增添一个进口点,以便将 Java 对象打包成 XML 文档.好像 Unmarshaller 类,别的程序最简单从静态办法中利用打包代码.假如没有选项需求传入 Java 对象,就象这里谈论的情形,这种方法很有效.同时,服从好的编程惯例、仅内部利用这个静态办法构造对象,以及调用非静态办法也很重要.这个静态办法是打包 Java 对象的“前门”.除了取出对象举行打包,静态办法还应当可以输出 XML 文档.
这里,需求避免一个常见错误,即答应将 XML 文档输出成 String 或 File.这两种输出办法假定将对象打包成某些永久存储,并保存在物理硬盘上.固然,对象常常通过网络传播送,如传送到另一个利用程序.大概它可以交给 XSLT 处理器,该处理器将 XML 变更成别的情势.这两种情形下,String 或 File 都不能完好办理问题.实际上,应当选取一个较安全的路由,并答应供利用于写入的 OutputStream.这个流可以封装 FileOutputStream,以便写入本地文件、网络衔接大概到另一个程序的管道(如刚提到的 XSLT 处理器).肯定了这个自变量后,才可以考虑 Marshaller 类的进口点.
清单 1. 静态进口点 /**
* <p>
* This method is the public entry 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代码的数据绑定之四 从无用的字符到有效的代码段[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |