`

调用非本机WebService时传入自定义对象参数的解决方案

阅读更多

问题描述:

由于业务需要,我们在服务器A上发布了一些WebService供开发人员调用,其中一个WebService有一个方法是以自定义对象为方法参数的,当我们在客户机调用此方法时,报出了No serializabler for class 之类的错误,大致的意思是不能为本机类找到序列化器,这个本机类是我在客户机上编写的一个类,用来和服务器上的类相对应,其中属性方法全部一致。

解决方案:

1   在服务器上的server-config.wsdd中的相应service(你要进行调用的service)添加一个<beanMapping>元素,就像下面这样:

xml 代码
  1. <service name="Hzwh" provider="java:RPC">     
  2.         <parameter name="methodName" value="*"/>     
  3.         <parameter name="className" value="shout.xtgl.Hzwh"/>     
  4.         <beanMapping languageSpecificType="java:shout.pub.PubRtn" qname="ns1:PubRtn" xmlns:ns1="urn:BeanService"/>     
  5.         <beanMapping languageSpecificType="java:shout.pub.PubArg" qname="ns2:PubArg" xmlns:ns2="urn:BeanService"/>     
  6.         <beanMapping languageSpecificType="java:shout.db.CoHzml" qname="ns3:CoHzml" xmlns:ns3="urn:BeanService"/>     
  7.     < /service>    

 

2  在客户机上注册本机上的类与服务器上的WebService提供类提供关联。我是在jsp代码里调用WebService的,所以看起来就像这样:

java 代码
  1.             //要调用的WebService URL地址   
  2.             String endpoint = "http://yan:8088/server/axis/Hzwh?wsdl";   
  3.             Service service = new Service();   
  4.             Call call = (Call) service.createCall();   
  5.             //参数1对应<beanMapping>的xmlns:ns属性,参数2对应<beanMapping>的qname属性   
  6.             QName name = new QName("urn:BeanService""CoHzml");  
  7.             //CoHzml是本机上的类,注册本机类,使其与服务提供类对应起来 
  8.             call.registerTypeMapping(CoHzml.class, name,   
  9.                     new BeanSerializerFactory(CoHzml.class, name),   
  10.                     new BeanDeserializerFactory(CoHzml.class, name));   
  11.             call.setTargetEndpointAddress(new java.net.URL(endpoint));   
  12.             //填写你要调用的方法名称    
  13.             call.setOperationName("add");   
  14.             //CoHzml是自定义的与服务提供类相对应的类   
  15.             CoHzml hzml = new CoHzml();   
  16.             hzml.ascm = "1";   
  17.             hzml.hz = "我";   
  18.             hzml.id = 6;   
  19.             hzml.pym = "w";   
  20.             hzml.wbm = "2";   
  21.             //传入参数   
  22.             String str = (String) call.invoke(new Object[] { hzml });   
  23.             System.out.println(str);  

 

3  如果返回的也是自定义对象,那么方法大同小异。只不过在第2步的Java代码21行中返回客户机与服务提供类相对应的类。

有什么疑问的欢迎大家留言。。。。

分享到:
评论

相关推荐

    C#调用使用java的带soaphead的webservice

    本案例中,我们将探讨如何使用C#在VS2013环境下调用一个Java编写的带有SOAP Header的Web服务。这个过程涉及到.NET Framework的Web服务客户端代理生成、SOAP消息的处理以及与Java Web服务的交互。 首先,我们需要...

    C#调用JavaWebService(客户端)

    - **调用服务方法**:通过代理类的对象调用JavaWebService中的公开方法,传入参数并接收返回值。 3. **处理数据类型**: C#和Java的数据类型可能会有所不同,比如Java的`Date`在C#中可能是`DateTime`。为了解决...

    通过webservice提交xml数据以及soap协议的使用

    Web服务(WebService)是一种基于互联网的标准,用于应用程序之间的交互,它允许不同的系统之间共享数据和服务。...了解这些基本概念和操作流程,能帮助你更好地设计和实现高效的Web服务解决方案。

    delphi与JavaScript进行交互,获取JS端返回值

    在描述中提到的DEMO程序,很可能是演示了如何通过`ScriptGate`这样的组件或者自定义的解决方案来实现Delphi与JavaScript的通信。`ScriptGate`可能是一个封装了JavaScript引擎的组件,允许Delphi应用执行JavaScript...

    webservice学习二之(1)axis2服务器端方式开发总结(附件含有项目)

    - **调用服务**:实例化Stub,通过Stub调用服务方法,传入参数,接收返回结果。 5. **附带项目分析** 压缩包中的“axis”文件可能包含了一个完整的示例项目,包括服务接口、实现类、WSDL文件以及部署配置。读者...

    .net易筋经面试宝典

    解决方案包括检查输入格式、调整验证规则等。 17. 上下文对象:在ASP.NET中,HttpContext对象提供了关于HTTP请求和响应的信息,常用于获取请求参数、会话状态等。 18. 转发与跳转:URL重定向(跳转)更改浏览器地址...

    java应用集成biee

    此解决方案可能是在互联网上首次公开提供的详细指导,希望读者能够从中受益并进一步交流探讨。 #### 二、环境搭建与准备工作 在开始集成之前,需要准备以下环境: 1. **安装部署BIEE**:确保已经在服务器上安装并...

    cxf3.0 spirng 集成笔记

    在本文中,我们将探讨如何将Apache CXF 3.0.2版本集成到Spring框架中,以及在这个过程中可能遇到的问题和解决方案。Apache CXF是一个开源的SOA(Service-Oriented Architecture)框架,它允许开发人员创建和消费各种...

Global site tag (gtag.js) - Google Analytics