您现在的位置: IT专家网 > Web服务子站 > WebService领域
WebService之axis的复杂对象传输
从程序中摘出的一些东东,跟大家分享一下。
先自定义发布:
写一个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> |
若服务发布出了什么问题(比如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)); |
- 本文关键词:

