快速业务通道

用Java客户机调用Web服务: J2SE和J2EE环境中Web服务客户机简介 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
它们依赖于实现类,并且不应该作为应用程序的一部分进行打包。可移植存根的设计超出了 JAX-RPC 1.0 和 1.1 的范围。

动态代理

您可以使用代理从 JAX-RPC Service中调用 Web 服务的操作。代理是实现 SEI 的 Java 类。获得代理使用的是 JAX-RPC Service 的getPort() 方法,它接受您想要调用的 Web 服务的端口的名称(存在于 WSDL 文档中)以及代理实现的 SEI。它之所以称为 动态是因为该代理是在运行时创建的。动态代理客户机的步骤如下:

获取一个 JAX-RPC Service 。

使用 JAX-RPC Service 的 getPort() 方法来获得一个代理以调用 Web 服务的操作。

在步骤1中,对于受管客户机,通过把 WSDL URL 以及 Web 服务名参数传送到 createService() 方法来获得 JAX-RPC Service 。对于 J2EE 容器管理的客户机,您通过 JNDI 查找来获取 JAX-RPC Service 。清单5展示了在 Web 服务上调用“getGreeting”操作的动态代理方法(步骤2)。

清单 5. 在动态代理上调用 Web 服务的操作

String namespace = "http://Hello.com"; String portName = "Hello"; QName portQN = new QName(namespace, portName); Hello myProxy = service.getPort(portQN, Hello.class); System.out.println(myProxy.getGreeting("Jane"));

这是所有您为了使用动态代理方法调用 Web 服务而需要编写的代码。使用这种方法的优势在于您可以编写可移植的、厂商无关的代码。然而,您需要知道开发时的 WSDL URL,并且需要在运行之前根据 WSDL 文档运行您的从 WSDL 到 Java 的映射工具。如果您没有这方面的信息,或者 WSDL URL 很可能改变,那么您应该改为使用 DII 方法。

用Java客户机调用Web服务: J2SE和J2EE环境中Web服务客户机简介(5)

时间:2011-02-03 IBM Bertrand Portier

动态调用接口(DII)

JAX-RPC Call 接口支持动态调用 Web 服务的操作。使用这种方法,您不需要知道开发时的 WSDL URL。JAX-RPC Service 用作实例化 JAX-RPC Call 的工厂,而不是从 JAX-RPC Service 中获得代理。此方法的步骤如下:

获取一个 JAX-RPC Service 。

使用 JAX-RPC Service 的 createCall() 方法实例化 JAX-RPC Call 。

使用它的 setter 方法来配置您的 Call 实例。

使用 JAX-RPC Call 的调用方法来调用 Web 服务的操作。

在步骤1中,对于受管客户机,仅仅通过把 Web 服务(而非 WSDL URL)的名称传送到 createService() 方法来从 JAX-RPC ServiceFactory 中获取 JAX-RPC Service 。对于 J2EE 容器管理的客户机,您通过 JNDI 查找来获取 JAX-RPC Service 。在步骤3中,配置参数为:操作的名称、端口号、目标服务端点的地址、返回类型。查阅 JAX-RPC 规范的8.2.4.2节可以获得标准的特性集的信息。步骤2到4示于 清单6中。

清单 6. 使用 DII 方法调用 Web 服务

String namespace = "http://Hello.com"; String portName = "Hello"; QName portQN = new QName(namespace, portName); String operationName = "getGreeting"; Call call = service.createCall(); call.setPortTypeName(portQN); call.setOperationName(new QName(namespace, operationName)); call.setProperty(Call.ENCODINGSTYLE_URI_PROPERTY, ""); call.setProperty(Call.OPERATION_STYLE_PROPERTY, "wrapped"); call.addParameter("param1", <xsd:string>,ParameterMode.IN); call.setReturnType(<xsd:string>); Object[] inParams = new Object[] {"Jane"}; String ret = (String) call.invoke(inParams);

您可以重用 Cal

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