Apache Axis2 提供了好幾種 XML 解決方案,可以輕松的開發(fā)功能強(qiáng)大的 Web 服務(wù)。Axis2 是實(shí)現(xiàn) Web 服務(wù)的一個(gè)非常不錯(cuò)的選擇。由于 Apache Axis2 和 Apache Geronimo duo 是免費(fèi)而且開放源碼的,因此可以考慮使用這兩者。
在本系列的前一部分中,我向您介紹了在本系列兩篇文章中使用到的 Java 類(參見 參考資料)。我們通過 WSDL 將這些類作為 Web 服務(wù)公開,然后創(chuàng)建了一個(gè) JiBX 定義描述,該定義描述將在文本中與 JiBX 數(shù)據(jù)綁定通信,來測試 Web 服務(wù)。在測試過程中,我們通過編譯 JiBX 綁定類來創(chuàng)建包裝類,使數(shù)據(jù)綁定類成為整個(gè) Web 服務(wù)中的一個(gè)功能部分。
在繼續(xù)深入開發(fā)之前,先要確保 <axis2_home>/lib 中的所有的 JAR 文件(包括您在本系列文章第一部分中拷貝的 JiBX 文件)都在您的類路徑下,并且在本文整個(gè)過程中要一直存在。同時(shí),還需確保您的系統(tǒng)中已安裝 Ant。Ant 可以從 Apache 下載獲得(參見 參考資料)。
讓我們開始生成服務(wù)吧。
首先,需要使用 Axis2 生成服務(wù),這樣您就可以使用稍后創(chuàng)建的客戶機(jī)來對它進(jìn)行測試。在上篇文章開始之前,您應(yīng)該已下載好必要的工具,并且設(shè)置好 AXIS2_HOME 環(huán)境變量。要開始創(chuàng)建服務(wù),鍵入清單 1 中的命令。
這將為您創(chuàng)建最基本的服務(wù)!下列部分顯示了各命令開關(guān)的注解:
-uri
開關(guān)告訴 Axis2 在哪能找到用于生成服務(wù)的 WSDL 文件。 -p
開關(guān)告訴 Axis2 服務(wù)要使用的 Java 包類。 -d jibx
選項(xiàng)指定 JiBX 數(shù)據(jù)綁定。 -s
開關(guān)指定只有同步(塊)方法可用。 -ss
開關(guān)告訴 Axis2 要構(gòu)建服務(wù)器端代碼。 -sd
開關(guān)告訴 Axis2 要構(gòu)建一個(gè)服務(wù)描述符(services.xml 文件)。 -ssi
開關(guān)是可選的,用于為服務(wù)實(shí)現(xiàn) ( SimpleServiceSkeleton.java
) 創(chuàng)建一個(gè) Java 接口。 -Ebinding
開關(guān)告訴 Axis2 在哪能找到 JiBX 定義說明文件。 現(xiàn)在已經(jīng)有了一個(gè) Web 服務(wù),但是還沒有任何定義。下一部分 將對服務(wù)進(jìn)行定義。
只要成功調(diào)用了 Web 服務(wù)的一項(xiàng)操作,便會(huì)調(diào)用服務(wù)主干中的方法。Web 服務(wù)操作的實(shí)現(xiàn)代碼包含在一個(gè)叫做 SimpleServiceSkeleton.java 的文件中(在本例中)。該文件位于 src/com/ibm/devWorks/xml/simpleService 目錄,并且是空文件。對它進(jìn)行定義,如清單 2 所示。
清單 2 中的代碼含有兩個(gè)方法,分別對應(yīng)于本系列第一篇文章中討論的兩個(gè)操作(請參見 參考資料)。第一個(gè)方法,OneWay
,是單向(或者只輸入)操作,它使用 OneWayRequest
Java 對象作為輸入?yún)?shù),并且沒有返回值。其實(shí)現(xiàn)僅僅是在屏幕上顯示從客戶機(jī)發(fā)送過來的內(nèi)容。
第二個(gè)方法, TwoWay
,使用 TwoWayRequest
Java 對象作為輸入,并且返回 TwoWayResponse
響應(yīng)。這個(gè)方法首先顯示傳入請求對象的 echoString
和 booolean
字段,把響應(yīng)中的 echoString
設(shè)置為請求中的 echoString
字段值,并把響應(yīng)對象中的 invertedBoolean
值設(shè)置為請求對象中的 booolean
值的相反值(真則設(shè)為假,假則設(shè)為真)。然后把響應(yīng)對象返回給客戶機(jī)。
服務(wù)已經(jīng)定義好了。接下來,我們將構(gòu)建服務(wù)并創(chuàng)建 JiBX 數(shù)據(jù)綁定包裝類。
在編譯和創(chuàng)建 JiBX 數(shù)據(jù)綁定包裝類之前,我們必須首先編譯各類。要編譯項(xiàng)目,鍵入:ant
。
此時(shí)切換到 build/classes 目錄創(chuàng)建包裝類,鍵入:java -jar <axis2_home>\lib\jibx-bind.jar ..\..\..\binding.xml
。
您會(huì)發(fā)現(xiàn)四個(gè)新的 JiBX_*
類文件。包裝類已經(jīng)創(chuàng)建完成?,F(xiàn)在重新打包 Axis2 服務(wù)存檔文件,鍵入(與之前相同的目錄):ant
。
請注意,您不必構(gòu)建代碼兩次。此處通過 Ant 可以知道代碼已構(gòu)建好,但是看到還有新文件,因此需要重新打包 Axis2 存檔文件。
服務(wù)已經(jīng)就緒,下節(jié)將在 Geronimo 上部署服務(wù)。
現(xiàn)在我們將部署剛剛創(chuàng)建和編譯好的服務(wù)。如果 Geronimo 還未運(yùn)行,應(yīng)啟動(dòng)它,鍵入: java -jar <geronimo_home>/bin/server.jar
。
現(xiàn)在將服務(wù)存檔文件 build/lib/SimpleService.aar 拷貝到 <geronimo_home>/repository/default/axis2/1166439304031/axis2-1166439304031.war/WEB-INF/services 目錄(需注意,準(zhǔn)確的目錄將有所不同)。
服務(wù)將很快自動(dòng)部署好,現(xiàn)在一切已就緒,下節(jié)將創(chuàng)建一個(gè)客戶機(jī)對其進(jìn)行測試。
客戶機(jī)允許您測試 Web 服務(wù)的功能和部署的正確性。同樣,我們將使用 JiBX 數(shù)據(jù)綁定創(chuàng)建一個(gè)客戶機(jī),用于測試已部署好的 Web 服務(wù)。
鍵入清單 3 中的命令,生成 Web 服務(wù)。
上面的命令簡單地創(chuàng)建了客戶樁(client stub)代碼。有關(guān)使用到的開關(guān)的解釋,請參見 生成服務(wù)。接下來,我們將定義真正的客戶機(jī)代碼,其代碼將用于測試 Web 服務(wù)。
現(xiàn)在我們將編寫用于測試 Web 服務(wù)已成功部署的代碼,這會(huì)使用到我們剛剛使用 JiBX 數(shù)據(jù)綁定創(chuàng)建的客戶樁。創(chuàng)建一個(gè) src/com/ibm/devWorks/xml/simpleService/Client.java 文件,并對它進(jìn)行定義,如清單 4 所示。
粗體顯示了值得注意的代碼。這個(gè)客戶機(jī)首先初始化客戶樁對象,然后將其傳遞給兩個(gè)可用方法。第一個(gè)方法,oneWay
,創(chuàng)建一個(gè) OneWayRequest
對象,并將 requestData
字段的值初始化為 Here is your requested data!
,然后數(shù)據(jù)將傳送到服務(wù)器,由于是單向操作,因此沒有返回。
第二個(gè)方法,twoWay
,創(chuàng)建一個(gè) TwoWayRequest
對象并初始化 echoString
和 booolean
字段。然后把請求對象發(fā)送給服務(wù),并返回一個(gè) TwoWayResponse
對象。根據(jù) 清單 1 中定義的邏輯,響應(yīng)對象中的 echoString
值應(yīng)該匹配請求對象中 echoString
的值,并且響應(yīng)對象中的invertedBoolean
應(yīng)該與請求對象中的 booolean
的字段值相反,或者為真(在本例中)。
我們已經(jīng)完成了客戶機(jī)定義?,F(xiàn)在我們只需編譯 JiBX 綁定包裝類,與前面構(gòu)建服務(wù)中的編譯一樣。
在為客戶機(jī)編譯和創(chuàng)建 JiBX 數(shù)據(jù)綁定包裝類之前,我們首先需要編譯各類。要編譯項(xiàng)目,鍵入:ant
。
現(xiàn)在切換到 build/classes 目錄創(chuàng)建包裝類,鍵入:java -jar <axis2_home>\lib\jibx-bind.jar ..\..\..\binding.xml
。
我們應(yīng)該注意到四個(gè)新創(chuàng)建的 JiBX_*
類文件,這與我們之前構(gòu)建服務(wù)時(shí)一樣。要重新打包包含客戶機(jī)代碼的 JAR 文件,鍵入(與之前相同的目錄):ant
。
這就全部完成了!最后剩下要做的就是完成測試。
現(xiàn)在,運(yùn)行我們剛剛定義的客戶機(jī)代碼,我們應(yīng)該在屏幕上看到正確的輸出。在運(yùn)行客戶機(jī)之前,必須確保含有客戶機(jī)代碼(build/lib/SimpleService-test-client.jar)的 JAR 文件在您的類路徑下。
要運(yùn)行客戶機(jī),鍵入如下內(nèi)容: java com.ibm.devWorks.xml.simpleService.Client
。
我們應(yīng)該能看到服務(wù)的輸出,如圖 1 所示。
圖 1. 顯示服務(wù)輸出的標(biāo)準(zhǔn)輸出結(jié)果
請注意,正確的值已發(fā)送給服務(wù)?,F(xiàn)在我們將檢驗(yàn)發(fā)回客戶機(jī)的值是否同樣正確,這可以通過查看客戶機(jī)的輸出來完成,如圖 2 所示。
一切都工作良好,您現(xiàn)在就可以施展 Jibx 魔法了!
現(xiàn)在,您應(yīng)該算是一員 JiBX-Axis2 Web 服務(wù)開發(fā)人員了,能夠使用 Axis2 和 JiBX 將您喜歡的一些 Java 類轉(zhuǎn)換成 Web 服務(wù)。
在本系列的兩篇文章中,我們通過 WSDL 將 Java 類公開,并使用 JiBX 定義描述將它們映射到 XML 數(shù)據(jù)。在這篇文章中,我們創(chuàng)建了一個(gè)實(shí)時(shí)的 Web 服務(wù),這個(gè)服務(wù)是使用 Axis2 和 Geronimo 部署的。然后使用 Axis2 創(chuàng)建和運(yùn)行客戶機(jī),來測試最終的實(shí)現(xiàn)。對于客戶機(jī)和服務(wù),我們都指定了 JiBX 數(shù)據(jù)綁定并分別為它們成功地創(chuàng)建了數(shù)據(jù)綁定包裝類。
描述 | 名字 | 大小 | 下載方法 |
---|---|---|---|
第 2 部分示例代碼 | x-jibx2-source.zip | 24KB | HTTP |
學(xué)習(xí)
聯(lián)系客服