从XML到Java代码的数据绑定之四 从无用的字符到有用的代码段 - 编程入门网
从XML到Java代码的数据绑定之四 从无用的字符到有用的代码段时间:2010-12-02在本系列的上一部分中,我演示了如何取出 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. 静态入口点 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |