问题描述:
由于业务需要,我们在服务器A上发布了一些WebService供开发人员调用,其中一个WebService有一个方法是以自定义对象为方法参数的,当我们在客户机调用此方法时,报出了No serializabler for class 之类的错误,大致的意思是不能为本机类找到序列化器,这个本机类是我在客户机上编写的一个类,用来和服务器上的类相对应,其中属性方法全部一致。
解决方案:
1 在服务器上的server-config.wsdd中的相应service(你要进行调用的service)添加一个<beanMapping>元素,就像下面这样:
xml 代码
- <service name="Hzwh" provider="java:RPC">
- <parameter name="methodName" value="*"/>
- <parameter name="className" value="shout.xtgl.Hzwh"/>
- <beanMapping languageSpecificType="java:shout.pub.PubRtn" qname="ns1:PubRtn" xmlns:ns1="urn:BeanService"/>
- <beanMapping languageSpecificType="java:shout.pub.PubArg" qname="ns2:PubArg" xmlns:ns2="urn:BeanService"/>
- <beanMapping languageSpecificType="java:shout.db.CoHzml" qname="ns3:CoHzml" xmlns:ns3="urn:BeanService"/>
- < /service>
2 在客户机上注册本机上的类与服务器上的WebService提供类提供关联。我是在jsp代码里调用WebService的,所以看起来就像这样:
java 代码
-
- String endpoint = "http://yan:8088/server/axis/Hzwh?wsdl";
- Service service = new Service();
- Call call = (Call) service.createCall();
-
- QName name = new QName("urn:BeanService", "CoHzml");
- //CoHzml是本机上的类,注册本机类,使其与服务提供类对应起来
- call.registerTypeMapping(CoHzml.class, name,
- new BeanSerializerFactory(CoHzml.class, name),
- new BeanDeserializerFactory(CoHzml.class, name));
- call.setTargetEndpointAddress(new java.net.URL(endpoint));
-
- call.setOperationName("add");
-
- CoHzml hzml = new CoHzml();
- hzml.ascm = "1";
- hzml.hz = "我";
- hzml.id = 6;
- hzml.pym = "w";
- hzml.wbm = "2";
-
- String str = (String) call.invoke(new Object[] { hzml });
- System.out.println(str);
3 如果返回的也是自定义对象,那么方法大同小异。只不过在第2步的Java代码21行中返回客户机与服务提供类相对应的类。
有什么疑问的欢迎大家留言。。。。
分享到:
相关推荐
这个工程详细的介绍了webService服务客户端如何调用简单和复杂的webService,其中就包括传递的参数是对象类型,返回数据是数组类型,还有最简单的基本类型。压缩包里还配置说明,清晰的说明webService的整个过程,对...
- 自定义类型参数集合:可以使用List或Array SoapObject来表示集合,每个元素都是自定义类型的SoapObject。 6. 示例代码片段 ```java // 创建SoapObject表示请求 SoapObject request = new SoapObject...
在探讨Java调用带有JSON参数的WebService之前,我们首先需要了解几个关键的技术概念:Java、JSON以及WebService。 Java是一种广泛使用的编程语言,它具有面向对象、跨平台、多线程以及健壮性等特点。Java在企业级...
本文将详细讲解在WebService中使用自定义类的五种解决方法。 1. **实现Serializable接口**: Java中,我们可以让自定义类实现`java.io.Serializable`接口,这使得Java对象可以被序列化为字节流,从而可以通过网络...
标题"Xfire调用webservice无法接收到参数问题解决"指出的核心问题是:当使用Xfire作为客户端调用Web服务时,服务端无法正确接收到传递的参数。这可能是由于多种原因引起的,如: 1. **XML序列化与反序列化问题**:...
在涉及到复杂对象如列表或自定义模型时,通常会使用JSON格式进行传输,因为它更轻量且易于解析。在C#中,我们可以使用Newtonsoft.Json库将实体对象序列化为JSON字符串,然后在Android端反序列化为Java对象。 服务端...
"webservice调用终极解决方案.docx"很可能包含了详细的步骤、示例代码和常见问题解答,它可以帮助开发者快速理解和应用这些解决方案。文档中可能涵盖了如何创建WSDL文件、如何生成客户端代理类、如何调试和测试Web ...
标题“Xfire调用WebService无法传递参数问题”暗示了开发者在尝试使用Xfire框架时遇到了参数无法正常传递到Web服务的情况。这可能涉及到多个方面,如编码问题、序列化错误、类型不匹配或者配置不正确等。以下是一些...
C++做客户端,通过gSoap调用webservice,所调用的webservice方法返回的是自定义实体类,如果返回int,String等基本数据类型,这很容易实现;但这里函数返回的是List,Course,List甚至是Object,应该很有价值!
然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string类型能正常传递参数外,q其他类型的参数不是默认值就是...
在实际应用中,我们可以根据需要自定义 ODI webservice 的调用方式和参数,从而实现更加复杂的数据同步场景。 Java 调用 ODI webservice 是实现数据同步的一种常见方式,可以帮助用户手动调用 ODI 方案执行,从而...
webservice 自定义
首先,我们需要在 Tomcat 目录下创建一个名为 WS.aar 的 Web Service,该 Web Service 包含一个名为 W 的服务名称和一个名为 say 的方法,该方法需要传入一个 String 参数并返回一个 String 值。 其次,我们需要在...
**WebService CXF 对象传递详解** 在Web服务领域,CXF是一个非常重要的开源框架,它允许开发者创建和消费各种Web服务。CXF支持SOAP、RESTful等多种通信模式,并且能够处理复杂的对象传递,使得Web服务的数据交换...
### Oracle存储过程中调用WebService的方法解析 在Oracle数据库中,通过存储过程调用WebService是一种常见的需求,尤其是在需要与外部系统进行交互的情况下。本文将详细解释如何实现这一功能,并且会结合给定的部分...
在本篇中,我们将深入探讨调用WebService的基本步骤、主要技术以及参数的处理方法。 首先,了解WebService的基本概念至关重要。WebService是一种基于XML(可扩展标记语言)的开放标准,它通过SOAP(简单对象访问...
调用https协议的webservice,以及证书手动加载。
在VC++中调用WebService服务是一项常见的任务,尤其在跨平台通信、系统集成或扩展应用程序功能时。WebService是一种基于Web的、松耦合的服务,它使用标准的HTTP协议进行通信,并通过XML(eXtensible Markup Language...
本主题的核心是"拼接XML调用WebService",这通常指的是通过构建XML字符串来构造请求,然后发送该请求到一个Web Service接口以获取响应。以下是对这个过程的详细解释: 1. **XML基础**:XML是一种结构化标记语言,它...