服務(wù)類型
在axis中有4中服務(wù)類型
RPC服務(wù)采用soap rpc的標(biāo)準(zhǔn),and also the SOAP "section 5" encoding.
Document 服務(wù)沒有采用任何編碼(所以你在組裝時(shí)不會(huì)看到復(fù)雜對象的序列化以及soap-style數(shù)組),但是仍然作了xml和java對象的互映射。
Wrapped服務(wù)和Document服務(wù)類似
Message 服務(wù)接受和返回soap Envelope中的任意的xml而不需要mapping/data得榜定。如果你想處理來自外部的原始的xml,可以采用Message 服務(wù)。
RPC服務(wù)
這個(gè)服務(wù)是axis默認(rèn)的服務(wù)。我們在前面的例子中寫的就是rpc服務(wù)。<service ... provider="java:RPC"> 。rpc服務(wù)遵從soap rpc規(guī)范和編碼規(guī)則,意味著來自rpc服務(wù)的xml將類似上面例子中的“echoString”--每個(gè)rpc調(diào)用被模塊化為一個(gè)外部元素,匹配操作名稱,并包含了很多內(nèi)部元素,每一個(gè)都是操作的一個(gè)參數(shù)。axis將把這些xml轉(zhuǎn)化為java對象,配送給你得服務(wù),并將序列化來自服務(wù)的java對象為xml.因?yàn)閞pc服務(wù)默認(rèn)采用soap section 5規(guī)則,對象將會(huì)通過"multi-ref" 序列化來編碼。
Document / Wrapped 服務(wù)
這2個(gè)服務(wù)很類似,都不需要用soap編碼來處理數(shù)據(jù)。他就是一個(gè)普通的xml格式。無論哪種情況,axis還是對他們做了xml到j(luò)ava得榜定,所以你最終處理的還是java對象,而不是xml結(jié)構(gòu)的字符串。
下面的例子來說明他們2個(gè)之間的區(qū)別。
<soap:Envelope xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<soap:Body>
<myNS:PurchaseOrder xmlns:myNS="http://commerce.com/PO">
<item>SK001</item>
<quantity>1</quantity>
<description>Sushi Knife</description>
</myNS:PurchaseOrder>
</soap:Body>
</soap:Envelope>
相關(guān)的PurchaseOrder類型定義如下:
<schema targetNamespace="http://commerce.com/PO">
<complexType name="POType">
<sequence>
<element name="item" type="xsd:string"/>
<element name="quantity" type="xsd:int"/>
<element name="description" type="xsd:string"/>
</sequence>
</complexType>
<element name="PurchaseOrder" type="POType"/>
</schema>
對于一個(gè)document服務(wù)來說,他將對應(yīng)到這樣的方法
public void method(PurchaseOrder po)
換句話說,整個(gè)PurchaseOrder元素將被處理為一個(gè)單一的對象,包含3個(gè)屬性。
而對于wrapped服務(wù)來說,他對應(yīng)于下面的方法
public void purchaseOrder(String item, int quantity, String description)
注意到,在wrapped中,PurchaseOrder元素被映射為代表了一個(gè)方法。他的參數(shù)就是他的那些元素。
他們在wsdd得使用如下
<service ... style="document"> for document style
<service ... style="wrapped"> for wrapped style
Message 服務(wù)
當(dāng)你需要處理純xml而不是java對象時(shí),你將會(huì)用到這種服務(wù)。
message服務(wù)的方法有4中簽名
public Element [] method(Element [] bodies);
public SOAPBodyElement [] method (SOAPBodyElement [] bodies);
public Document method(Document body);
public void method(SOAPEnvelope req, SOAPEnvelope resp);