首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

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

2012-10-31 
调用非本机WebService时传入自定义对象参数的解决方案问题描述:由于业务需要,我们在服务器A上发布了一些We

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

问题描述:

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

解决方案:

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

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

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

热点排行