商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
您的位置:首页 > 技术频道 > 正文


创建客户端
  现在,让我们编写客户端代码,这实际上是相当容易的事情(参见清单3)。通常,JAX-RPC看起来就像是您在清单3中看见的代码那样:创建服务实现,向它要求所需的Web service端口,并调用适当的方法。其中的特殊之处在于调用authorSearchRequest()方法时,您必须使用作者名初始化AuthorRequest对象。在这种情况下,您想查看书籍部分,您想要概要情况,而不是详细数据,而且您限制了搜索,让它包含关键字“Web”。您需要设置的其他重要值是开发人员令牌。出于明显的理由,我还没有在这里进行赋值!

客户端代码
  清单3. JAX-RPC客户端创建了服务实现,向它要求所需的Web service端口,并调用适当的方法。

public class Client { public static void main(String[] args) { AmazonSearchService_Impl impl = new AmazonSearchService_Impl(); AmazonSearchPort port = impl.getAmazonSearchPort(); AuthorRequest authorRequest = new AuthorRequest(); authorRequest.setAuthor("Kevin Jones"); authorRequest.setDevtag("[developer token here]"); authorRequest.setMode("books"); authorRequest.setKeywords("Web"); authorRequest.setType("lite"); try { ProductInfo productInfo = port.authorSearchRequest(authorRequest); Details[] details = productInfo.getDetails(); for (int ndx = 0; ndx < details.length; ndx++) { Details detail = details[ndx]; System.out.println(detail.getProductName()); } } catch (RemoteException e) { e.printStackTrace(); } } }


  URL硬编码在桩中。URL不会经常变化,但是假定您需要发送请求给另外一个URL,那该怎么办呢?您可以让一个服务位于多台服务器上,或许是出于故障恢复的理由或负载平衡的目的,或者可能您想通过跟踪工具(可以显示每个方向上正在发送的SOAP数据)发送请求和响应。要完成这些任务,您可以在桩中修改Web service地址:

AmazonSearchPort_Stub port = (
AmazonSearchPort_Stub)impl.
getAmazonSearchPort();
port._setProperty(
AmazonSearchPort_Stub.
ENDPOINT_ADDRESS_PROPERTY,
"http://localhost:9090/onca/
soap3");

  注意,getAmazonSearchPort()的返回值被转给实现类而不是接口,所以我们可以设置端点地址,以便调用localhost。
  然后,您可以运行一个跟踪工具,比如来自Axis的tcpmon或者我编写的HttpProxy(下载HttpProxy的代码)。这个工具被设置为监听客户端要调用的端口上的请求,并把它们转发给原来的端口(参见图3)。



   HttpProxy跟踪工具被设置为监听客户端要调用的端口上的请求,并把它们转发给原来的端口。
如果有些问题难于跟踪,您可以使用这些工具来检验SOAP和HTTP。如果使用了代理,您需要告诉Java运行时通过该代理进行调用。您可以通过设置Java系统属性来做到这一点:

 

public static void main( String[] args) { System.setProperty( "proxySet", "true" ); System.setProperty( "http.proxyHost", "myproxy" ); System.setProperty( "http.proxyPort", "8080" ); System.setProperty( "http.proxyUser", "xxx"); System.setProperty( "http.proxyPassword", "yyy"); ... }

  Web service正在快速成为构建客户端/服务器应用程序的一项标准。编写Web service有多种方式,包括手写和使用工具包。有各种可用于Java的工具包,包括开源的Axis和Sun编写的JAX-RPC。关于通过使用wscompile读取WSDL和生成必需的客户端代码,并使用JAX-RPC来实现Web service客户端,我们已经接触到了其方方面面。下一步将是了解如何编写服务器。请参见“编写一个Web service服务器”一文。

  我们尚未讨论的还有一些其他的方面,比如管理HTTP会话、HTTP身份验证和管理错误,以及各种Java规范,比如SOAP with Attachments API for Java (SAAJ)和Java Architecture for XML Binding (JAXB),在Web service领域中所扮演的角色。对于Web service也有讲解不够深入的方面,比如管理附件,理解WSDL,以及rpc/encoded和document/literal风格服务之间的差别。我们将来会对这些主题进行更为深入的探讨。

1 2 3 4 5 6
【内容导航】
第1页: 描述服务 第2页: 向下直到桩
第3页: 配置元素 第4页: 特性列表
第5页: 查找桩 第6页: 创建客户端
©版权所有。未经许可,不得转载。
[责任编辑:李宁]
[an error occurred while processing this directive]