快速业务通道

Java Web服务,第3部分: Axis2数据绑定 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
n</author>  </addBook>  <getBooksByTypeResponse xmlns="http://ws.sosnoski.com/library/wsdl">   ...   <getBooksByTypeReturn isbn="0445203498" type="scifi">   <author xmlns="http://ws.sosnoski.com/library/types">Cook, Glen</author>   <title xmlns="http://ws.sosnoski.com/library/types" xmlns:xsi="http://www.w3.org/2001    /XMLSchema-instance" xsi:nil="true"/>   </getBooksByTypeReturn>  </getBooksByTypeResponse>

这是未设置所需值的一个简单示例。对于更为复杂的模式,XMLBeans 生成的 API 可能会 隐藏更多的缺陷。XMLBeans 用户邮件列表的最近一次讨论曾谈及这样的情况,即必须将值添 加到两个不同的列表,以更改生成正确输出的顺序。因此 XMLBeans 要求开发人员既要了解 模式,还要了解生成的代码如何与模式相关,以确保应用程序代码构建有效的 XML 文档。数 据绑定框架的一个主要好处是,通常能够对开发人员隐藏模式的这些细节,而 XMLBeans 显 然在这方面做得并不好。

可以通过调用生成类中包括的 validate() 方法来避免 XMLBeans 处理和生成无效 XML 文档的问题。如果使用 XMLBeans,则应至少在测试和开发期间使用此方法来检查所有文档。 不过,验证对性能具有很大的影响(正如您在下一篇文章中将看到的,即使不对每个文档调 用 validate(),XMLBeans 也已经非常慢了),因此很多应用程序都应该在生产部署中避免 验证开销。就结果信息而言,验证也具有相当的局限性。为了避免导致验证错误,应该对出 现错误的文档运行独立的模式验证。

JiBX

JiBX(我自己开发的)是主要侧重使用现有 Java 类(而不是从模式进行代码生成)的数 据绑定框架。对于 JiBX,要首先创建绑定定义,以定义 Java 数据对象与 XML 之间如何转 换,然后使用可通过添加实现转换的方法(作为字节码)来增强数据类文件的工具对该绑定 进行编译。JiBX 运行时框架将随后使用这些添加的方法来在数据和 XML 之间进行转换。

JiBX 方法提供了一些独有的优势,也有自己独有的缺点。就好的一面而言,JIBX 可让您 在 Web 服务接口添加到现有服务代码的情况下直接使用现有类。Jibx2Wsdl 工具特别适合这 种用途,因为它会生成所需的所有内容,从而方便地将现有代码作为 Axis2 服务部署。可以 在使用单个数据模型的情况下为相同的类定义不同的绑定,以同时用于文档的不同 XML 版本 。通过修改绑定,甚至通常能在重构数据类的情况下保持相同的 XML 表示形式。

清单 9 显示了 JiBX 客户机代码中有意义的部分,其中使用了匹配消息元素的类。此代 码与清单 5 中所示的 ADB 对等项类似,因此这里就不详细讨论了。唯一值得注意的差异是 ,由于数据类和消息类都在用户的控制之下,因此可以方便地向通过 JiBX 使用的类添加常 规构造函数(如 AddBookRequest 的情况)和其他支持方法。

清单 9. JIBX 客户机代码

// create the server instance
JibxLibraryStub stub = new JibxLibraryStub(target);
// retrieve a book directly
String isbn = "0061020052";
GetBookResponse bresp = stub.getBook(new GetBookRequest(isbn));
Book book = bresp.getBook();
if (book == null) {
  System.out.println("No book found with ISBN ''" + isbn + ''\'''');
} else {
  System.out.println("Retrieved ''" + book.getTitle() + ''\'''');
}
isbn = "9999999999";
bresp = stub.getBook(new GetBookRequest(isbn));
book = bresp.getBook();
if (book == nul

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