大概1年多前,有個(gè)項(xiàng)目用到webservice,那時(shí)候研究axis時(shí)候的一些記錄,可以對(duì)比下現(xiàn)在的axis2或者xfire.
?????????????????????????????????????????????????????????WebService之a(chǎn)xis的復(fù)雜對(duì)象傳輸
先自定義發(fā)布:
寫(xiě)一個(gè)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>
服務(wù)發(fā)布后,以上的發(fā)布信息都會(huì)被添加到server-config.wsdd文件里~
若服務(wù)發(fā)布出了什么問(wèn)題(比如View里面看不到任何服務(wù)等……==!)一個(gè)考慮的就是這個(gè)server-config.wsdd~
上面的高亮顯示,這是關(guān)鍵,它在server端定義如何序列化和反序列化complexType
若沒(méi)有這個(gè),那么你在客戶端registry.getDefaultTypeMapping()將什么都得不到~~
這里的<typeMapping .../>定義了一個(gè)book對(duì)象,它是服務(wù)方法 public book[] getAllBooks() 的返回類(lèi)型,類(lèi)定義在tests.book,namespace是服務(wù)的namespace
具體的wsdd文件說(shuō)明在axisUserguide里面,具體位置 : %axis_home%/docs/reference.html
以此類(lèi)推,服務(wù)中所有的非原子類(lèi)型返回都必須typeMapping一下~~~(= =!汗)
注冊(cè)復(fù)雜類(lèi)型的客戶端代碼:
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,如果用錯(cuò)了axis會(huì)發(fā)出一大堆http500來(lái)抱怨的~~~
附:自己寫(xiě)的一個(gè)類(lèi)來(lái)遠(yuǎn)程調(diào)用axis的服務(wù),省得一個(gè)個(gè)去service得call.
axisGo.rar?(現(xiàn)在看來(lái)代碼十分簡(jiǎn)陋,那時(shí)接觸java還沒(méi)半年。不過(guò)作為一個(gè)關(guān)鍵的螺絲已經(jīng)運(yùn)行在學(xué)校的xx系統(tǒng)里面了,真的是幫了我很大的忙,還寫(xiě)了個(gè)遠(yuǎn)程通過(guò)WEB服務(wù)訪問(wèn)數(shù)據(jù)庫(kù)的orm工具,地獄一樣的代碼,到處是反射)