问题描述:
由于业务需要,我们在服务器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行中返回客户机与服务提供类相对应的类。
有什么疑问的欢迎大家留言。。。。
分享到:
相关推荐
该文档主要讲解ksoap2调用webService服务,包含无参调用,基本类型参数调用,自定义类型参数调用以及自定义参数集合调用;由于文档中提到的服务地址为内测服务地址,所以暂时不能访问,文档仅供参考,如url、...
这个工程详细的介绍了webService服务客户端如何调用简单和复杂的webService,其中就包括传递的参数是对象类型,返回数据是数组类型,还有最简单的基本类型。压缩包里还配置说明,清晰的说明webService的整个过程,对...
java调用json参数的webservice 涉及技术: JAVA JSON WEBSERVICE
webservice传递的内容必须是可序列化的,不管是参数还是返回值。解决方法很多比如序列化,类型控制等
然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string类型能正常传递参数外,q其他类型的参数不是默认值就是...
此程序demo详细描述的从发布接口到调用接口的全部过程,详细描述了Xfire调用webservice参数无法传递的问题。
C++做客户端,通过gSoap调用webservice,所调用的webservice方法返回的是自定义实体类,如果返回int,String等基本数据类型,这很容易实现;但这里函数返回的是List,Course,List甚至是Object,应该很有价值!
webservice 自定义
.net调用webservice接口例子.net调用webservice接口例子.net调用webservice接口例子.net调用webservice接口例子
webservice终极调用,解决一切问题。
调用https协议的webservice,以及证书手动加载。
拼接xml调用webservice 拼接xml调用webservice 拼接xml调用webservice
此程序demo详细描述的从发布接口到调用接口的全部过程,详细描述了Xfire调用webservice参数无法传递的问题。
C++做客户端,通过gSoap调用java发布的webservice,所调用的java方法返回的是自定义实体类,如果返回int,String等基本数据类型,这很容易实现;但这里函数返回的是List,Course,List甚至是Object,应该很有价值! ...
Android调用webservice示例,webServcep返回实例,通过Json传递,接收后再还回实体
该资源包含了一个自定义的webservice,并且用android客户端调用其返回基本类型的值,适合初学者,测试可以运行,注意,测试时候,手机和电脑必须在同一子网下,设置将改代码里的ip地址,改为自己的ip地址
java调用.net的webservice传字符串参数,axis方式和xfire方式的使用说明及相关jar包。
超简单的webservice调用demo,对hutool工具进行简单的封装,只需要输入webservice接口名、接口参数即可进行webservice接口调用,欢迎大家吐槽
C# _.NET_动态调用webservice的三种方式 在本文中,我们将讨论如何动态调用WebService的三种方式。在某些情况下,我们可能需要在程序运行期间动态调用一个未知的服务。这可以通过使用.NET Framework的System.Web....
动态调用webservice与复杂对象的序列化,反序列化