正 文

为Web服务创建Java客户端


www.7dspace.com  更新日期:2005-10-14 11:39:46  七度空间


  调用协议类代理对象上的方法

  协议类代理类,我们的例子中是RegisterPersonSoap,定义了精确反映Web服务操作的stub方法。通常,proxy方法被称为stub方法,因为它们实际上并没有做真正的方法应该做的事情,而是调用远程方法来完成真正的任务。由于示例Web服务定义了一个setPerson方法,所以SOAP类代理类也定义了一个setPerson stub方法。为了调用Web服务的setPerson方法,首先应该调用代理的setPerson stub方法。

  记住这个看似简单的方法调用实际上为你做了不少事情。它将方法的所有参数编组,以组成一个适当地格式化过的SOAP消息(意味着它将参数从Java类型转换成XML类型),再将这个消息发送给Web服务,然后等待SOAP响应消息,最后解分组响应消息中的数据并把这些数据作为Java类型返回给你。

  对RegisterClient.java中setPerson的调用发生在第278行。

  m_proxy.setPerson(p, startHeader);

  这里,p是一个Person对象,startHeader是一个会话头部(本文后面会解释)。

  客户端的Java类路径

  RegisterClient.java示例中包含了一个可用来编译客户端的build.xml ant script,以及可分别在Windows和Linux/UNIX机器上执行客户端的run.bat和run.sh文件。可以检查这些文件来查看客户端使用的类路径。简单地说,类路径必须包括:

  · 客户端类本身

  · 使用clientgen创建的或者通过Java Proxy链接从WebLogic Workshop的测试视图中得到的客户端代理JAR文件

  · 通用Web服务客户端支持JAR文件webserviceclient.jar,该文件可以在BEA WebLogic Platform 7.0安装文件下的WL_HOME/server/lib目录中找到,也可以通过Proxy Support Jar链接从WebLogic Workshop测试视图中获得。

  在webserviceclient.jar中发现的支持类也可以在weblogic.jar中找到,但是类路径中包含的weblogic.jar在测试时容易混淆。你的客户端应该在那些能够访问目标Web服务主机的主机中工作,不管这些主机是否安装了WebLogic Platform。

  这(几乎)就是全部事情了

  这样说很有道理。Clientgen产生的客户端JAR文件以及底层的JAX-RPC基础使从Java代码中调用Web服务变得很容易。

  "等一会儿",你会说,"Person类是从哪里来的,会话头部又是什么"?不要着急,请继续往下看。

  Web服务接口中的复杂Java类型

  SOAP规范定义了如何将参数构建成一个方法,而WSDL规范则使用XML Schema类型定义了如何在XML中表示Java类型。当为Web服务生成一个WSDL文件时,Web服务操作期望的参数XML Schema被包含在WSDL文件中。当客户端支持代码被生成时,比如说是由clientgen生成的吧,这时clientgen工具就可以从WSDL文件中精确地判断出要在客户端语言中生成何种类型,以便通过客户端代码构建操作参数。至于JAX-RPC,Web服务接口中提到的所有类型都被生成了一个Java类。

  在RegisterPerson.jws中,Web服务用到了两个Java类:Person和Contact。它们是在WSDL文件中描述的,并且clientgen为客户端JAR文件生成了具有代表性的类。

  客户端JAR文件中的类和Web服务中的类是不一样的,知道这一点很重要。它们只不过是方便创建必需的数据结构以往Web服务的操作中传送数据的类而已。如果检查这些类,就会注意到它们除用来设置和获得类的数据成员所必需的accessor和mutator之外,不包含其他任何方法。它们不包含(也不能)Web服务使用的实际类的任何逻辑,因为代理类是从WSDL文件创建的,而该文件只包含类型和结构信息。

  默认情况下,代理类是使用反映了Web服务(或者XML映像中相应的元素,当存在时)的XML命名空间的包分层生成的。RegisterPerson.jws使用WebLogic Workshop的默认命名空间http://www.openuri.org,所以代理类是在org.openuri.www包中生成的。

  org.openuri.www.Person
  org.openuri.www.Contact

  对于那些使用document literal编码方式的Web服务来说,这些类被用来向proxy stub方法传送参数。想知道如何处理各种不同的SOAP编码方式,请继续往下读。

  记住当你使用Java Proxy链接来从WebLogic Workshop的测试视图中获取Web服务的客户端JAR文件时,WebLogic Workshop按照默认设置为你调用了clientgen。如果你手工调用clientgen,可能还提供了自定义clientgen行为的参数。例如,你可以控制生成类的包层次。

4页,页码:[1] [2] [3] [4] 

上一篇:Ajax技术:构建动态的Java应用程序
下一篇:Illustrator CS2实例图解:绘制八卦鱼
作者:John Methot  来源:dev2dev ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐