WebService之axis的复杂对象传输

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

先自定义发布:

写一个deploy.wsdd 文件:

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

<service name="mShop" provider="java:RPC">

<parameter name="className" value="tests.shop"/>

<parameter name="allowedMethods" value="*"/>

<typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"

encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

qname="ns1:book"

serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"

type="java:tests.book"

xmlns:ns1="http://127.0.0.1:8080/axis/services/mShop"/>

</service>

</deployment>

服务发布后,以上的发布信息都会被添加到server-config.wsdd文件里~

若服务发布出了什么问题(比如View里面看不到任何服务等……==!)一个考虑的就是这个server-config.wsdd~

上面的高亮显示,这是关键,它在server端定义如何序列化和反序列化complexType

若没有这个,那么你在客户端registry.getDefaultTypeMapping()将什么都得不到~~

这里的<typeMapping .../>定义了一个book对象,它是服务方法 public book[] getAllBooks() 的返回类型,类定义在tests.book,namespace是服务的namespace

具体的wsdd文件说明在axisUserguide里面,具体位置 : %axis_home%/docs/reference.html

以此类推,服务中所有的非原子类型返回都必须typeMapping一下~~~(= =!汗)

注册复杂类型的客户端代码:

org.apache.axis.client.Service service = new org.apache.axis.client.Service();

TypeMappingRegistry registry = service.getTypeMappingRegistry();

TypeMapping map = registry.getDefaultTypeMapping();

QName qType = new QName("http://localhost/tests","book");

Class qClass = Class.forName("tests.book");

map.register(qClass,qType,new BeanSerializerFactory(qClass, qType),

new BeanDeserializerFactory(qClass, qType));

要注意,Service是org.apache.axis.client.Service,而不是javax.xml.rpc.Service,如果用错了axis会发出一大堆http500来抱怨的~~~

附:自己写的一个类来远程调用axis的服务,省得一个个去service啊call啊的.

axisGo.rar

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航