上面的代碼可能和原文檔中不同,并且在名稱空間、函數多態上會給用戶造成糊涂。不過別急,我在翻譯手冊的同時會加入很多解釋的代碼,如果哪位純粹看不懂可以通過郵件獲取幫助:luopc@edu-edu.com.cn ,郵件主題必須是我提供的文檔名稱。
通過上面的調用代碼,最終生成向
服務器請求SOAP信息包,具體XML內容如下:
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Hello!
這里我不再多少,細心的朋友請從代碼中找相應的對應信息來進行自己的邏輯理解。至于SOAP協議在我以后的翻譯文檔中會加入進去。
從上面的代碼中我們在調用的時候輸入了參數new Object[]{“hello!”}。然后從生成的SOAP請求包中可以看到自動序列化成
Hello!。你可以看到參數名稱為arg0,類型為xsd:string。其實在Axis客戶端我們可以直接通過具體的方法來設置每一個參數名稱、類型以及返回值類型。如下代碼:
call.addParameter("testParam",
org.apache.axis.Constants.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
加入上面的代碼之后生成如下的SOAP信息:
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
Hello!
可以作簡單的對比。
也許你會疑惑設置參數名稱和不設置參數名稱有什么區別的疑問。這里作簡單的解釋:
1. 為什么要call.setReturnType(org.apache.axis.Constants.XSD_STRING)?
上面你可以調用或者可以不調用,但當返回結果中沒有標明數據類型時Axis就不知道如何進行數據類型轉換。當然如果返回類型你很清楚并且返回應答SOAP的結果中表明了相應的數據類型你便可以不進行上面的函數調用。
2. 為什么要設置參數名稱和類型?
好了,下在你知道了如何調用Web Services了,下面告訴你如何寫作和發布Web Services。
通過Axis發布Web Services
這里寫作一個簡單的類,然后一步一步進行發布。希望用戶能夠從中理出一些思路來。我在其他的關于Web Services的文章中會專門針對Web Services的通用發布方法。雖然Web Services牽涉到很多復雜的知識,但請大家不要感覺到這些操作簡單,也許你已經有很多疑問,沒關系,記下你的疑問,不斷的投試。
public class SayHello {
public String echoString(String hello){
return hello;
}
}
哈哈,這個類是不是太簡單了。
一步一步來。
Axis提供兩種將Java類發布成Web Services的途徑,即即時快速自動發布和通過配置
文件進行發布。我們首先從最容易部署的入手。
JWS----即時部署
簡單說就是將自己寫的Java類源
文件按一定的規則Copy到特定的目錄下便可自行被Axis部署。具體步驟如下:
? 將上面寫的SayHello.
java復制到axis目錄下。
? 改名為SayHello.jws。
注意:在你寫的類中不能有具體包的信息,因為這正是Axis即時部署不支持的。
運行我們前面寫的客戶端進行測試,運行結果是hello!。
目前你是否有如下的問題?
如果類中用多態的函數將如何處理?
其實很簡單,我們知道在每次發出調用請求之前代理
程序在后臺會直接請求你給的URL,這里是http://localhost:8080/axis/SayHello.jws?wsdl,其實這一請求返回來的是WSDL描述
文件,通過具體的描述
文件的內容和你輸入的參數的類型比較,最終確定發送什么請求。細節上的解釋需要用戶閱讀SOAP的具體內容。我也會提供相應的權威文當翻譯的。
Axis的客戶端默認就是通過HTTP協議傳輸嗎?
如何將自己定義的類型進行映射?
通過WSDD自定義部署
上面的自動部署相當簡單,但當你需要
? 映射自己的類型時
? 不需要暴露源代碼時
? 需要自己的路徑和包管理時
? 對用戶操作Web Services的事件進行相應時
就需要通過WSDD來自定義部署。
前面新特性中提到過,Axis是一個很靈活的可配置
系統,但在配置之前你得懂得Axis Web Services描述文檔(WSDD)的格式和意義。這里有一個簡單的例子(deploy.wsdd):
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
java:RPC">
很簡短的描述就會自定義對特定類以Web Services的形式發布。上面的每一個service項都會意味著開通一個相應的可被WSDL
文件引用的服務。其內部描述信息將會描述從請求-處理請求-應答需要的所有核心信息。這里provider=”
java:RPC”對應著相應的服務類為org.apache.axis.providers.
java.RPCProvider。其實你可以通過多種方式提供相應的服務。在關于Axis的架構文章中將會詳細解釋這些內容。
上面的各個參數我不再解釋,我想大家一看就明白。
下面讓我們在上面的簡單配置上開始一步一步的進行各種高級配置:
服務存活范圍
Axis提供Session、Request和Application三種可選范圍配置。具體配置標記為:
...