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

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

.NET Web服务是一种在网络上进行通信的技术,它使用一个称为SOAP(简单对象访问协议)的协议来传输数据。使用.NET Web服务,我们可以通过自定义对象参数来传递数据。 自定义对象参数是指我们可以定义自己的类,在Web服务方法中使用这些类作为参数传递给其他应用程序。在定义自定义对象参数,我们可以添加属性和方法来表示特定的数据和操作。 在.NET Web服务中传递自定义对象参数,我们需要进行以下几个步骤: 1. 定义自定义对象类:我们首先需要定义自定义对象类,这个类包含我们需要传递的数据和相关操作的属性和方法。 2. 定义Web服务方法:我们需要在Web服务中定义一个方法,这个方法接受自定义对象作为参数,并且执行相关操作。在方法内部,我们可以通过访问自定义对象的属性和方法来操作传递的数据。 3. 调用Web服务方法:在应用程序中,我们可以通过创建Web服务代理来调用Web服务方法。我们可以使用代理对象来传递自定义对象参数,并且调用相关方法。 使用自定义对象参数可以使我们的Web服务更具灵活性和扩展性。通过传递自定义对象,我们可以将相关的数据和操作封装在一起,使得方法调用更简洁和可读性更好。 总之,.NET Web服务提供了一种方便的方式来在网络上进行通信。通过使用自定义对象参数,我们可以传递包含特定数据和操作的自定义对象,使得Web服务更加灵活和可扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值