服務類型
在axis中有4中服務類型
RPC服務采用soap rpc的標準,and also the SOAP "section 5" encoding.
Document 服務沒有采用任何編碼(所以你在組裝時不會看到復雜對象的序列化以及soap-style數組),但是仍然作了xml和java對象的互映射。
Wrapped服務和Document服務類似
Message 服務接受和返回soap Envelope中的任意的xml而不需要mapping/data得榜定。如果你想處理來自外部的原始的xml,可以采用Message 服務。
RPC服務
這個服務是axis默認的服務。我們在前面的例子中寫的就是rpc服務。<service ... provider="java:RPC"> 。rpc服務遵從soap rpc規范和編碼規則,意味著來自rpc服務的xml將類似上面例子中的“echoString”--每個rpc調用被模塊化為一個外部元素,匹配操作名稱,并包含了很多內部元素,每一個都是操作的一個參數。axis將把這些xml轉化為java對象,配送給你得服務,并將序列化來自服務的java對象為xml.因為rpc服務默認采用soap section 5規則,對象將會通過"multi-ref" 序列化來編碼。
Document / Wrapped 服務
這2個服務很類似,都不需要用soap編碼來處理數據。他就是一個普通的xml格式。無論哪種情況,axis還是對他們做了xml到java得榜定,所以你最終處理的還是java對象,而不是xml結構的字符串。
下面的例子來說明他們2個之間的區別。
<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>
相關的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>
對于一個document服務來說,他將對應到這樣的方法
public void method(PurchaseOrder po)
換句話說,整個PurchaseOrder元素將被處理為一個單一的對象,包含3個屬性。
而對于wrapped服務來說,他對應于下面的方法
public void purchaseOrder(String item, int quantity, String description)
注意到,在wrapped中,PurchaseOrder元素被映射為代表了一個方法。他的參數就是他的那些元素。
他們在wsdd得使用如下
<service ... style="document"> for document style
<service ... style="wrapped"> for wrapped style
Message 服務
當你需要處理純xml而不是java對象時,你將會用到這種服務。
message服務的方法有4中簽名
public Element [] method(Element [] bodies);
public SOAPBodyElement [] method (SOAPBodyElement [] bodies);
public Document method(Document body);
public void method(SOAPEnvelope req, SOAPEnvelope resp);