2007-11-07
调用非本机WebService时传入自定义对象参数的解决方案
关键字: WebService Java 自定义 对象 jsp axis问题描述:
由于业务需要,我们在服务器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 代码
- //要调用的WebService URL地址
- String endpoint = "http://yan:8088/server/axis/Hzwh?wsdl";
- Service service = new Service();
- Call call = (Call) service.createCall();
- //参数1对应<beanMapping>的xmlns:ns属性,参数2对应<beanMapping>的qname属性
- 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是自定义的与服务提供类相对应的类
- 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行中返回客户机与服务提供类相对应的类。
有什么疑问的欢迎大家留言。。。。
发表评论
提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则
- 浏览: 29674 次
- 性别:

- 来自: 长沙

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
Oracle中实现分页的SQL语 ...
注意需要排序是使用:ROW_NUMBER() OVER (ORDER BY fi ...
-- by topcloud -
Flex与Java Servlet交互实 ...
呵呵,有什么问题在这里交流吧! 发站内短信也可以。QQ一般不上
-- by mhqawjh -
Oracle中实现分页的SQL语 ...
我认为用这个比较好 select * from ( select row_.*, ...
-- by feiji868 -
Flex与Java Servlet交互实 ...
写得很好。有很大的提示作用。多谢楼主,希望能有更多彩的文章。
-- by hegang3 -
Oracle中实现分页的SQL语 ...
laodizhuq 写道应该是: SELECT x.* from ( ...
-- by armorking






评论排行榜