将 Apache SOAP Web service 迁移到 Web service for J2EE 标准

本主题说明如何将使用 Apache SOAP 开发的 Web service 迁移到基于 Web Services for Java 2 Platform, Enterprise Edition(J2EE)规范开发的 Web service。

在您开始之前

如果您已使用基于 Apache SOAP 的 Web service 而现在要开发和实施基于 Web Services for J2EE 规范的 Web service,则需要迁移用 V5.0.2 之前的 4.0 和 5.0 的所有版本开发的客户机应用程序。

为何以及何时执行此任务

要根据 Web Services for J2EE 标准迁移这些客户机应用程序:

此任务的步骤

  1. 计划您的迁移策略。 您可以使用两种方法中的任一种将 Apache SOAP 客户机移植到基于 XML 的 RPC 的 Java API(JAX-RPC)Web service 客户机:
    • 如果您具有(或者可以创建)此服务的 Web 服务描述语言(WSDL)文档,则考虑使用 WSDL2Java 命令工具生成 Web service 的绑定。将 Apache SOAP 客户机改变为使用已生成的 JAX-RPC 绑定需要进行很多工作,但产生的客户机代码更健壮,并且更易于维护。要采用这种方法,请参阅开发基于 Web Services for J2EE 的 Web service 客户机
    • 如果您没有服务的 WSDL 文档,不想更改服务,并且要用最小的工作量移植 Apache SOAP 客户机,您可以将代码转换为使用类似于 Apache SOAP API 的 JAX-RPC 动态调用接口(DII)。DII API 不使用 WSDL 或已生成的绑定。
    因为 JAX-RPC 不为用户编写的序列化器指定框架,因此 JAX-RPC 不支持使用定制序列化器。如果您的应用程序无法遵守 WebSphere Application Server 支持的 Java、WSDL 和 XML 技术之间的缺省映射,则不要尝试迁移应用程序。 本主题的以下部分假设您确定使用 JAX-RPC 动态调用接口(DII)API。
  2. 查看 GetQuote 样本。 样本收藏夹中有一个 Web service 迁移样本。此样本在 GetQuote.java 文件中(原先是为 Apache SOAP 用户编写的),并且包括有关迁移到 JAX-RPC DII 接口所需的更改的说明。
  3. 将客户机应用程序从 Apache SOAP 转换到 JAX-RPC DII Apache SOAP API 和 JAX-RPC DII API 的结构类似。您可以在它们中实例化和配置调用对象、设置参数、调用操作和处理结果。 您可以在 JAX-RPC 中,用下列命令创建 Service 对象的一般实例:
    javax.xml.rpc.Service service = ServiceFactory.newInstance().createService(new QName(""));
    1. 创建 Call 对象。 用以下代码在 Apache SOAP 中创建 Call 对象的实例:
      org.apache.soap.rpc.Call call = new org.apache.soap.rpc.Call ()
      在 JAX-RPC 中创建 Call 对象的实例:
      java.xml.rpc.Call call = service.createCall();
    2. 设置端点统一资源标识(URI)。 在 Apache SOAP 中,操作的目标 URI 作为参数传递到
      call.invoke:  call.invoke("http://...", "");
      在 JAX-RPC 中,setTargetEndpointAddress 方法用作
      call.setTargetEndpointAddress("http://...");

      Apache SOAP 具有包含请求的路由信息的 Call 对象的 setTargetObjectURI 方法。JAX-RPC 没有相同的方法。targetObjectURI 中的信息包含在 JAX-RPC 的 targetEndpoint URI 中。

    3. 设置操作名称。 在 Apache SOAP 中,通过
      call.setMethodName("opName");
      配置 Call 对象的操作名称。
      在 JAX-RPC 中使用 setOperationName 方法,其接受  QName 而不是  String 参数,如下面示例中的描述:
      call.setOperationName(new javax.xml.namespace.Qname("namespace", "opName"));
    4. 设置编码样式。 在 Apache SOAP 中,通过
      call.setEncodingStyleURI(org.apache.soap.Constants.NS_URI_SOAP_ENC);
      配置 Call 对象的编码样式。
      在 JAX-RPC 中,通过 Call 对象的属性
      call.setProperty(javax.xml.rpc.Call.ENCODINGSTYLE_URI_PROPERTY, "http://schemas.
      xmlsoap.org/soap/encoding/");
      设置编码样式。
    5. 声明参数和设置参数值。 Apache SOAP 参数类型和值由参数实例描述,在调用前,将它们收集到向量中并且在 Call 对象上设置,例如:
      Vector params = new Vector (); 
      params.addElement (new org.apache.soap.rpc.Parameter(name, type, value, encodingURI)); 
      // repeat for additional parameters... 
      call.setParams (params);
      对于 JAX-RPC,用参数名和类型(不需要提供它们的值)配置 Call 对象,例如:
      call.addParameter(name, xmlType, mode); 
      // repeat for additional parameters 
      call.setReturnType(type);
      其中
      • name (type java.lang.String) 是参数的名称
      • xmlType (type javax.xml.namespace.QName) 是参数的 XML 类型
      • mode (type javax.xml.rpc.ParameterMode) 是参数的方式,例如:IN、OUT 或 INOUT
    6. 进行调用。 在 Apache SOAP 中,通过
      org.apache.soap.Response resp = call.invoke(endpointURI, "");
      调用 Call 对象上的操作。
      在 JAX-RPC 中,将参数值收集到数组中,并且传递给  call.invoke,如下面示例中的描述:
      Object resp = call.invoke(new Object[] {parm1, parm2,...});
    7. 检查故障。 在 Apache SOAP 中,您可通过检查响应来检查调用上的 SOAP 故障:
      if resp.generatedFault then {   
      org.apache.soap.Fault f = resp.getFault;   
      f.getFaultCode();   
      f.getFaultString(); 
      }
      如果调用时发生 SOAP 故障,则 JAX-RPC 中显示  java.rmi.RemoteException 错误。
      try {          
      ... call.invoke(...) 
      } catch (java.rmi.RemoteException) ...
    8. 检索结果。 在 Apache SOAP 中,如果调用成功并返回结果,则可以从 Response 对象获取它:
      Parameter result = resp.getReturnValue(); return result.getValue();
      在 JAX-RPC 中,没有显示异常时,调用的结果是返回的对象:
      Object result = call.invoke(...);
       ... 
      return result;
      

结果

您已将 Apache SOAP Web service 迁移到了 J2EE Web service。


转载地址:http://publib.boulder.ibm.com/infocenter/dmndhelp/v6rxmx/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/twbs_migratewbs.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值