快速业务通道

从XML到Java代码的数据绑定之三 从文本到字节码 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
第一个变量分开,引用 XML 模式的实际位置。本例中,模式 configuration.xsd 是一个本地文件,它与文档在同一个目录中。也可以通过使用 URL 来引用网络上任意位置的模式。

在缺省名称空间中,附加属性(因为它们没有前缀)定义了版本 (1.1) 和名称 (Unsecured Web Listener)。

接着,声明了模式中的 Port 对象,并定义了它的数据:端口号为 80,协议是 http。正确取消编组成 Java 代码后,该文档就变成了 WebServiceConfigurationImpl类的实例。然后,Java 代码可以使用本系列第二部分中设计的接口 WebServiceConfiguration,以使用基本 XML 文档中的数据。(请注意,可能会在应用程序中执行验证,如 模式验证侧栏中所概述的。)

从XML到Java代码的数据绑定之三 从文本到字节码(2)

时间:2010-12-02

模式验证

较新的 XML 语法分析器,如 Apache Xerces 语法分析器的当前发行版,允许对 XML 实例文档执行模式验证。验证允许在程序格式上确保 XML 文档符合它引用的 XML 模式。请与语法分析器供应商联系或参考文档,以确定语法分析器是否支持模式验证,其验证范围,以及如何打开验证。

打开前门

正式开始之前,需要提供入口点以取消编组 XML 文档,该文档作为返回 Java 对象的方法的输入。(由于您会忆起,本例中取消编组的结果只是 Java 对象。)然后,该对象可以转换成适当的接口,其实,您已经生成了该接口(在本系列第二部分中)。

对于示例 SchemaMapper 类,允许传入 URL 是最有意义的。由于可以使用网络资源作为输入,而不是只允许文件名,这就提供了更多选择。知道了这一点后,下一步就从 URL 创建 JDOM 文档对象 ( org.jdom.Document ),然后处理文档。请查看清单 2 中执行该操作的代码。

清单 2. 将字符串映射成 Java 指定的类型

/**     * * This method is the public entry point for unmarshalling an object from * an XML instance document. * * * @param instanceURL URL for the instance document. * @return Object - the created Java Object, or * null if problems occur in a way that does not * generate an Exception. * @throws IOException when errors in binding occur. */ public static Object unmarshall(URL instanceURL) throws IOException { // Read in the document SAXBuilder builder = new SAXBuilder(); try { Document doc = builder.build(instanceURL); Element rootElement = doc.getRootElement(); Unmarshaller unmarshaller = new Unmarshaller(); return unmarshaller.getJavaRepresentation(rootElement); } catch (JDOMException e) { throw new IOException (e.getMessage()); } }

清单 2 中的方法是静态的,允许直接调用它而无需实例化类的实例。由于对 unmarshall 方法的多个调用之间没有需要共享的数据,因此该方法可以是静态的。一旦处理了 XML,就将文档的根元素(以 JDOM 表示)就被传到执行从 XML 到 Java 对象转换的内部方法。

转换数据

我不打算逐行解释取消编组中使用的完整代码。可以查看 类的完整源码清单 ,它基本上是不需加以说明的。但是,在入口点示例中,有一些值得强调的事情。如果创建了适当类的新实例,将使用 XML 文档提供的值调用 mutator 方法(全都名为 setXXX )。当然,这将使 XML 数据在实例的 Java 方法中随处都可用。清单 3 显示了处理这种查找方法以及随后调用的代码片段。

清单 3. unmarshaller 类的入口点

// For each attribute, get its name and call mutator        List attributes = rootElement.getAttributes();        Method[] methods = objectClass.getMethods();        for (Iterato

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号