`

调用非本机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行中返回客户机与服务提供类相对应的类。

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

分享到:
评论

相关推荐

    webService客户端调用服务端传对象参数

    这个工程详细的介绍了webService服务客户端如何调用简单和复杂的webService,其中就包括传递的参数是对象类型,返回数据是数组类型,还有最简单的基本类型。压缩包里还配置说明,清晰的说明webService的整个过程,对...

    ksoap2调用webService服务 包含自定义参数 自定义参数集合等

    - 自定义类型参数集合:可以使用List或Array SoapObject来表示集合,每个元素都是自定义类型的SoapObject。 6. 示例代码片段 ```java // 创建SoapObject表示请求 SoapObject request = new SoapObject...

    java调用json参数的webservice

    在探讨Java调用带有JSON参数的WebService之前,我们首先需要了解几个关键的技术概念:Java、JSON以及WebService。 Java是一种广泛使用的编程语言,它具有面向对象、跨平台、多线程以及健壮性等特点。Java在企业级...

    WebService中使用自定义类的五种解决方法

    本文将详细讲解在WebService中使用自定义类的五种解决方法。 1. **实现Serializable接口**: Java中,我们可以让自定义类实现`java.io.Serializable`接口,这使得Java对象可以被序列化为字节流,从而可以通过网络...

    Xfire调用webservice无法接收到参数问题解决

    标题"Xfire调用webservice无法接收到参数问题解决"指出的核心问题是:当使用Xfire作为客户端调用Web服务时,服务端无法正确接收到传递的参数。这可能是由于多种原因引起的,如: 1. **XML序列化与反序列化问题**:...

    Android调用webservice进行实体对象的传递Json

    在涉及到复杂对象如列表或自定义模型时,通常会使用JSON格式进行传输,因为它更轻量且易于解析。在C#中,我们可以使用Newtonsoft.Json库将实体对象序列化为JSON字符串,然后在Android端反序列化为Java对象。 服务端...

    webservice调用终极解决方案_webservice_源码

    "webservice调用终极解决方案.docx"很可能包含了详细的步骤、示例代码和常见问题解答,它可以帮助开发者快速理解和应用这些解决方案。文档中可能涵盖了如何创建WSDL文件、如何生成客户端代理类、如何调试和测试Web ...

    Xfire调用webservice无法传递参数问题

    标题“Xfire调用WebService无法传递参数问题”暗示了开发者在尝试使用Xfire框架时遇到了参数无法正常传递到Web服务的情况。这可能涉及到多个方面,如编码问题、序列化错误、类型不匹配或者配置不正确等。以下是一些...

    C++通过gSOAP调用webservice方法返回自定义实体类

    C++做客户端,通过gSoap调用webservice,所调用的webservice方法返回的是自定义实体类,如果返回int,String等基本数据类型,这很容易实现;但这里函数返回的是List,Course,List甚至是Object,应该很有价值!

    C#调用JavaWebService

    然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string类型能正常传递参数外,q其他类型的参数不是默认值就是...

    java 调用 odi webservice

    在实际应用中,我们可以根据需要自定义 ODI webservice 的调用方式和参数,从而实现更加复杂的数据同步场景。 Java 调用 ODI webservice 是实现数据同步的一种常见方式,可以帮助用户手动调用 ODI 方案执行,从而...

    自定义类型的webservice

    webservice 自定义

    C#调用java发布的WebService终稿.pdf

    首先,我们需要在 Tomcat 目录下创建一个名为 WS.aar 的 Web Service,该 Web Service 包含一个名为 W 的服务名称和一个名为 say 的方法,该方法需要传入一个 String 参数并返回一个 String 值。 其次,我们需要在...

    WebService CXF 对象传递 附

    **WebService CXF 对象传递详解** 在Web服务领域,CXF是一个非常重要的开源框架,它允许开发者创建和消费各种Web服务。CXF支持SOAP、RESTful等多种通信模式,并且能够处理复杂的对象传递,使得Web服务的数据交换...

    oracle传入一个字符串,调用webservice

    ### Oracle存储过程中调用WebService的方法解析 在Oracle数据库中,通过存储过程调用WebService是一种常见的需求,尤其是在需要与外部系统进行交互的情况下。本文将详细解释如何实现这一功能,并且会结合给定的部分...

    调用WEBService参数

    在本篇中,我们将深入探讨调用WebService的基本步骤、主要技术以及参数的处理方法。 首先,了解WebService的基本概念至关重要。WebService是一种基于XML(可扩展标记语言)的开放标准,它通过SOAP(简单对象访问...

    调用https协议的webservice,以及证书手动加载

    调用https协议的webservice,以及证书手动加载。

    VC++中WebService服务的调用

    在VC++中调用WebService服务是一项常见的任务,尤其在跨平台通信、系统集成或扩展应用程序功能时。WebService是一种基于Web的、松耦合的服务,它使用标准的HTTP协议进行通信,并通过XML(eXtensible Markup Language...

    拼接xml调用webservice

    本主题的核心是"拼接XML调用WebService",这通常指的是通过构建XML字符串来构造请求,然后发送该请求到一个Web Service接口以获取响应。以下是对这个过程的详细解释: 1. **XML基础**:XML是一种结构化标记语言,它...

Global site tag (gtag.js) - Google Analytics