快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
法将非常方便。这种做法非常简单;为服务定义的操作(如果要深究的话, 从技术上是为端口类型定义的)实际上等效于接口定义中的方法调用。唯一的主要区别在于 ,服务将输入和输出定义为 XML 消息,而不是调用参数和返回值。因此,为了在 Web 服务 定义中嵌入现有 API,您只需要约定如何将调用参数和返回值表示为 XML 消息结构即可。

幸运的是,Microsoft® 早期就确立了此领域的一个约定,为其他人节约了建立自己 约定的时间。此约定称为 wrapped document/literal,是 .NET 在将方法调用作为 Web 服 务操作公开时使用的缺省表示形式。实际上,此包装方法规定每个输入消息都是仅包含子元 素序列的 XML 元素,而每个输出消息都是具有单个子元素的 XML 元素。除了完全 .NET 互 操作性外,Microsoft 实现还有一些其他并不重要的技术细节,但用于图书馆示例(请参见 清单 4 中给出的部分代码)的消息并不是为了这些细节而采用此方法。

WSDL2Java 支持在 ADB 代码生成中对此类 wrapped doc/lit 服务进行取消包装操作。当 对合适的 WSDL 服务定义使用取消包装操作时,生成的客户机存根(以及服务器代码框架) 将更为简单和直接。清单 6 显示了与清单 5 等效的客户机应用程序代码,不过其中向 WSDL2Java 传递了 -uw 参数,以生成取消包装接口。清单 5 中增加的复杂性层次的消息类 几乎都从清单 6 中去掉了(除了 GetTypes 类),服务方法直接接受参数和返回值,而不是 嵌入在消息类中。实际上,ADB 仍然生成消息类,并在生成的代码中使用这些类,但代码通 常会忽略这些类,而直接使用数据。

清单 6. ADB 取消包装客户机代码

// create the client stub
AdbUnwrapLibraryStub stub = new AdbUnwrapLibraryStub(target);
// retrieve a book directly
String isbn = "0061020052";
BookInformation book = stub.getBook(isbn);
if (book == null) {
  System.out.println("No book found with ISBN ''" + isbn + ''\'''');
} else {
  System.out.println("Retrieved ''" + book.getTitle() + ''\'''');
}
// retrieve the list of types defined
TypeInformation[] types = stub.getTypes(new GetTypes());
System.out.println("Retrieved " + types.length + " types:");
for (int i = 0; i < types.length; i++) {
  System.out.println(" ''" + types[i].getName() + "'' with " +
    types[i].getCount() + " books");
}
// add a new book
String title = "The Dragon Never Sleeps";
isbn = "0445203498";
try {
  stub.addBook("scifi", isbn, new String[] { "Cook, Glen" }, title);
  System.out.println("Added ''" + title + ''\'''');
  title = "This Should Not Work";
  stub.addBook("xml", isbn, new String[] { "Nobody, Ima" }, title);
  System.out.println("Added duplicate book - should not happen!");
} catch (AddDuplicateFaultException e) {
  System.out.println("Failed adding ''" + title +
    "'' with ISBN ''" + isbn + "'' - matches existing title ''" +
    e.getFaultMessage().getBook().getTitle() + ''\'''');
}
// create a callback instance
BooksByTypeCallback cb = new BooksByTypeCallback();
// retrieve all books of a type asynchronously
stub.startgetBooksByType("scifi", cb);
long start = System.currentTimeMillis();
synchronized

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