本指南的目的是讓您盡快使用Axis2開始創建服務和客戶端。我們將采用一個簡單的StockQuote服務,向您展示可以創建和部署它的一些不同方式,以及快速查看Axis2附帶的一個或兩個實用程序。然后,我們將介紹如何創建客戶端以訪問這些服務。
內容
- 介紹
- 做好准備
- Axis2服務
- 創造服務
- 部署POJO
- 使用AXIOM構建服務
- 使用ADB生成服務
- 使用XMLBeans生成服務
- 使用JiBX生成服務
- 生成客戶端
- 使用AXIOM創建客戶端
- 使用ADB生成客戶端
- 使用XML Bean生成客戶端
- 使用JiBX生成客戶端
- 摘要
- 進一步研究
快速安裝說明:
該文檔的代碼可以在提取的標准二進制分發中找到,更具體地說,可以在目錄中的Axis2_HOME / samples /中找到 - quickstart,quickstartadb,quickstartaxiom,quickstartjibx和quickstartxmlbeans。(考慮現在獲取它,因為它將幫助您繼續。)它包括Ant構建文件(build.xml),我們將在整個示例中引用它們以使編譯更容易。
介紹
讓我們從服務本身開始。我們將簡化,以便您可以看到構建和部署服務時發生的事情。在這樣的實例中,StockQuoteService示例似乎是必需的,所以讓我們使用以下代碼(參見代碼清單1)。
代碼清單1:StockQuoteService類
package samples.quickstart.service.pojo; import java.util.HashMap; public class StockQuoteService { private HashMap map = new HashMap(); public double getPrice(String symbol) { Double price = (Double) map.get(symbol); if(price != null){ return price.doubleValue(); } return 42.00; } public void update(String symbol, double price) { map.put(symbol, new Double(price)); } }
這將是一個簡單的服務,有兩個可能的調用。其中一個是輸入/輸出消息,另一個是only-in 的服務。最終,我們將打包服務並以四種不同的方式部署它。
首先,讓我們看看這個簡單的Java類如何與服務相對應。
做好准備
在我們使用Axis2構建任何東西之前,我們必須處理一些內務管理。首先,您需要准備好使用Axis2的環境。幸運的是,它只涉及幾個簡單的步驟:
- 下載並安裝Java(最低版本為JDK1.5)。將JAVA_HOME環境變量設置為安裝JDK版本的目錄的路徑名。
- 下載Axis2並將其解壓縮到目標目錄。
- 將axis2.war文件復制到servlet引擎的webapps目錄。
- 將AXIS2_HOME環境變量設置為指向步驟中的目標目錄。請注意,Axis2生成的所有腳本和構建文件都取決於此值,因此請勿跳過此步驟!Linux用戶也可以在AXIS2_HOME / bin目錄中運行setenv.sh文件,將AXIS2_HOME環境變量設置為解壓縮的Axis2目錄的路徑名。
在大多數情況下,我們還需要一個WSDL文件來提供服務。Axis2的Java2WSDL可用於引導WSDL。要從Java類生成WSDL文件,請執行以下步驟:
- 創建並編譯Java類。
(Windows) %AXIS2_HOME%\bin\java2wsdl.bat -cp . -cn samples.quickstart.service.pojo.StockQuoteService -of StockQuoteService.wsdl (Linux) $AXIS2_HOME/bin/java2wsdl.sh -cp . -cn samples.quickstart.service.pojo.StockQuoteService -of StockQuoteService.wsdl
- 使用以下命令生成WSDL:
生成WSDL文件后,您可以進行所需的更改。例如,您可以添加自定義錯誤或更改生成的元素的名稱。例如,此StockQuoteService.wsdl位於AXIS2_HOME / samples / quickstartadb / resources / META-INF文件夾中,我們將在本指南的其余部分中使用該文件夾,替換生成過程創建的通用參數。
Axis2服務
在我們構建任何東西之前,了解成品的外觀是有幫助的。
Axis2的服務器端可以部署在任何Servlet引擎上,並具有以下結構。如代碼清單2所示。
代碼清單2:axis2.war的目錄結構
axis2-web META-INF WEB-INF classes conf axis2.xml lib activation.jar ... xmlSchema.jar modules modules.list addressing.mar ... soapmonitor.mar services services.list aservice.aar ... version.aar web.xml
從頂部開始,axis2-web是構成Axis2管理應用程序的JSP集合,通過它您可以執行任何操作,例如添加服務以及參與和取消模塊。WEB-INF目錄包含實際的java類和其他支持文件,用於運行部署到services目錄的任何服務。
所有這些中的主要文件是axis2.xml,它控制應用程序如何處理收到的消息,確定Axis2是否需要應用modules目錄中定義的任何模塊。
如您所見,服務可以部署為* .aar文件,但其內容必須以特定方式排列。例如,該服務的結構如下:
- StockQuoteService - META-INF - services.xml - lib - samples - quickstart - service - pojo - StockQuoteService.class
這里,服務的名稱是StockQuoteService,它在services.xml文件中指定,並對應於此服務的頂級文件夾。編譯的Java類根據包名稱放置在適當的位置。lib目錄包含服務運行所需的任何特定於服務的JAR文件(在本例中為none),除了那些已經與Axis2 WAR文件和servlet容器的公共JAR目錄一起存儲的文件。最后,META-INF目錄包含有關Axis2正確執行它所需服務的任何其他信息。services.xml文件定義服務本身並將Java類鏈接到它(參見代碼清單3)。
代碼3:服務定義文件
<service name="StockQuoteService" scope="application"> <description> Stock Quote Sample Service </description> <messageReceivers> <messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/> <messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </messageReceivers> <parameter name="ServiceClass"> samples.quickstart.service.pojo.StockQuoteService </parameter> </service>
這里定義了服務,以及不同消息交換模式的相關messageReceiver類型。
META-INF目錄也是您打算為此應用程序包含的任何自定義WSDL文件的位置。
您可以通過簡單地獲取此文件層次結構並將其復制到servlet引擎的webapps / axis2 / WEB-INF / services目錄來部署服務。(注意,必須首先在servlet引擎中安裝Axis2 WAR文件。)這稱為“爆炸”格式。您還可以將文檔壓縮為* .aar文件,類似於* .jar文件,並將* .aar文件直接放在servlet引擎的webapps / axis2 / WEB-INF / services目錄中。
現在您了解了我們正在努力實現的目標,我們已經准備好開始構建。
首先,下載 並解壓縮適當版本的Axis2標准二進制分發版。確保將AXIS2_HOME變量的值設置為與解壓縮此版本內容的位置相匹配。
讓我們看一下創建客戶端和服務的一些不同方法。
創建服務
在本節中,我們將介紹基於StockQuoteService類創建服務的五種方法:部署普通舊Java對象(POJO),使用AXIOM的OMElement構建服務,使用Axis2數據綁定框架(ADB)生成服務,生成使用XMLBeans進行服務,並使用JiBX生成服務。
部署POJO
要使用POJO(Plain Old Java Objects)部署服務,請執行以下步驟。
請注意AXIS2_HOME / samples / quickstart中包含的目錄結構(services.xml文件來自本指南的第一部分):
- quickstart - README.txt - build.xml - resources - META-INF - services.xml - src - samples - quickstart - service - pojo - StockQuoteService.java
請注意,您可以通過鍵入以下內容從quickstart目錄生成WSDL:
ant generate.wsdl
但是,創建StockQuoteService.wsdl是可選的。它可以是直接從Java類生成的版本,也可以是該文件的自定義版本,而services.xml與本文檔前面引用的文件相同。
現在通過在quickstart目錄中鍵入ant generate.service來構建項目,該目錄創建以下目錄結構:
- quickstart/build/classes - META-INF - services.xml - samples - quickstart - service - pojo - StockQuoteService.class
如果要以展開的目錄格式部署服務,請將classes目錄重命名為StockQuoteService,並將其復制到servlet引擎中的webapps / axis2 / WEB-INF / services目錄。否則,將build / StockQuoteService.aar文件復制到servlet引擎中的webapps / axis2 / WEB-INF / services目錄。然后通過查看以下服務列表來檢查以確保服務已正確部署:
http://localhost:8080/axis2/services/listServices
您還可以在以下位置查看WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
the schema 在
http://localhost:8080/axis2/services/StockQuoteService?xsd
URL正常工作后,快速測試服務。嘗試將瀏覽器指向以下URL:
http://localhost:8080/axis2/services/StockQuoteService/getPrice?symbol=IBM
您將收到以下響應:
<ns:getPriceResponse xmlns:ns="http://pojo.service.quickstart.samples/xsd"><ns:return>42</ns:return></ns:getPriceResponse>
如果您調用更新方法,
http://localhost:8080/axis2/services/StockQuoteService/update?symbol=IBM&price=100
然后執行第一個getPrice URL,您將看到價格已更新。
使用AXIOM構建服務
要使用AXIOM“從頭開始”構建服務,請執行以下步驟。
請注意/ samples / quickstartaxiom中包含的目錄結構:
- quickstartaxiom - README.txt - build.xml - resources - META-INF - services.xml - StockQuoteService.wsdl - src - samples - quickstart - service - axiom - StockQuoteService.java - clients - AXIOMClient.java
由於AXIOM略有不同,因此您需要一個與POJO不同的service.xml文件。定義它,如代碼清單4所示。
代碼4:服務定義文件。
<service name="StockQuoteService" scope="application"> <description> Stock Quote Service </description> <operation name="getPrice"> <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> </operation> <operation name="update"> <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/> </operation> <parameter name="ServiceClass">samples.quickstart.service.axiom.StockQuoteService</parameter> </service>
請注意,它幾乎相同,只是在service.xml文件中顯式定義了操作,MessageReceivers現在是RawXML。
現在,上面引用的StockQuoteService.java類是一個使用Axis2庫中的類的普通Java類,其定義如代碼清單5所示。
代碼5:使用AXIOM的StockQuoteService類
package samples.quickstart.service.axiom; import javax.xml.stream.XMLStreamException; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import java.util.HashMap; public class StockQuoteService { private HashMap map = new HashMap(); public OMElement getPrice(OMElement element) throws XMLStreamException { element.build(); element.detach(); OMElement symbolElement = element.getFirstElement(); String symbol = symbolElement.getText(); String returnText = "42"; Double price = (Double) map.get(symbol); if(price != null){ returnText = "" + price.doubleValue(); } OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd", "tns"); OMElement method = fac.createOMElement("getPriceResponse", omNs); OMElement value = fac.createOMElement("price", omNs); value.addChild(fac.createOMText(value, returnText)); method.addChild(value); return method; } public void update(OMElement element) throws XMLStreamException { element.build(); element.detach(); OMElement symbolElement = element.getFirstElement(); String symbol = symbolElement.getText(); OMElement priceElement = (OMElement)symbolElement.getNextOMSibling(); String price = priceElement.getText(); map.put(symbol, new Double(price)); } }
Axis2使用AXIOM,或AXIs對象模型,類似於DOM(文檔對象模型)的結構,它基於StAX API(用於XML的Streaming API)。充當服務的方法必須將OMElement作為其參數,OMElement表示在這種情況下發生的XML元素是傳入SOAP消息的有效負載。例如,方法getPrice(OMElement)提取有效負載元素的第一個子元素的內容,該元素對應於股票代碼,並使用它來查找股票的當前價格。除非這是“僅在”服務,否則這些方法必須返回OMElement,因為它成為返回SOAP消息的有效負載。
現在通過在Axis2_HOME / samples / quickstartaxiom目錄中鍵入ant generate.service來構建項目。
將StockQuoteService.aar文件放在servlet引擎的webapps / axis2 / WEB-INF / services目錄中,並通過查看服務列表來檢查是否已正確部署該服務,
http://localhost:8080/axis2/services/listServices
您還可以在以下位置檢查自定義WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
the schema
http://localhost:8080/axis2/services/StockQuoteService?xsd
使用ADB生成服務
要使用Axis2數據綁定框架(ADB)生成和部署服務,請執行以下步驟。
通過在Axis2_HOME / samples / quickstartadb目錄中鍵入以下內容,使用WSDL2Java實用程序生成框架:
(Windows) %AXIS2_HOME%\bin\wsdl2java.bat -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.service.adb -d adb -s -ss -sd -ssi -o build\service (Linux) $AXIS2_HOME/bin/wsdl2java.sh -uri resources/META-INF/StockQuoteService.wsdl -p samples.quickstart.service.adb -d adb -s -ss -sd -ssi -o build/service
否則,只需在Axis2_HOME / samples / quickstartadb目錄中鍵入ant generate.service即可。
選項-d adb指定軸數據綁定(ADB)。-s開關僅指定同步或阻塞調用。-ss開關創建服務器端代碼(框架和相關文件)。-sd開關創建服務描述符(services.xml文件)。-ssi開關為服務框架創建一個接口。現在,服務文件應位於構建/服務中。
如果您直接使用WSDL2Java生成代碼,接下來您必須修改生成的框架以實現服務(如果您使用“ant generate.service”,則完成的框架將自動復制到生成的框架上)。
打開build / service / src / samples / quickstart / adb / service / StockQuoteServiceSkeleton.java文件並對其進行修改,以將服務的功能添加到生成的方法中; 如代碼清單6所示。
代碼6:定義服務骨架文件
package samples.quickstart.service.adb; import samples.quickstart.service.adb.xsd.GetPriceResponse; import samples.quickstart.service.adb.xsd.Update; import samples.quickstart.service.adb.xsd.GetPrice; import java.util.HashMap; public class StockQuoteServiceSkeleton implements StockQuoteServiceSkeletonInterface { private static HashMap map; static{ map = new HashMap(); } public void update(Update param0) { map.put(param0.getSymbol(), new Double(param0.getPrice())); } public GetPriceResponse getPrice(GetPrice param1) { Double price = (Double) map.get(param1.getSymbol()); double ret = 42; if(price != null){ ret = price.doubleValue(); } GetPriceResponse res = new GetPriceResponse(); res.set_return(ret); return res; } }
現在,您可以通過在build / service目錄中鍵入以下命令來構建項目:
ant jar.server
如果一切順利,您應該在窗口中看到BUILD SUCCESSFUL消息,並在build / service / build / lib目錄中看到StockQuoteService.aar文件。將此文件復制到servlet引擎的webapps / axis2 / WEB-INF / services目錄。
您可以通過查看服務列表來檢查以確保服務已正確部署,
http://localhost:8080/axis2/services/listServices
您還可以在以下位置檢查自定義WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
the schema
http://localhost:8080/axis2/services/StockQuoteService?xsd
使用XMLBeans生成服務
要使用XMLBeans生成服務,請執行以下步驟。
通過在Axis2_HOME / samples / quickstartxmlbeans目錄中鍵入以下內容,使用WSDL2Java實用程序生成框架
%AXIS2_HOME%\bin\wsdl2java.bat -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.service.xmlbeans -d xmlbeans -s -ss -sd -ssi -o build\service
否則,只需在Axis2_HOME / samples / quickstartxmlbeans目錄中鍵入ant generate.service。
選項-d xmlbeans指定XML Bean數據綁定。-s開關僅指定同步或阻塞調用。-ss開關創建服務器端代碼(框架和相關文件)。-sd開關創建服務描述符(services.xml文件)。-ssi開關為服務框架創建一個接口。現在,服務文件應位於構建/服務中。
如果您直接使用WSDL2Java生成代碼,接下來您必須修改生成的框架以實現服務(如果您使用“ant generate.service”,則完成的框架將自動復制到生成的框架上)。
接下來打開build / service / src / samples / quickstart / service / xmlbeans / StockQuoteServiceSkeleton.java文件並修改它以將服務的功能添加到生成的方法中(參見代碼清單7)。
代碼7:定義服務框架
package samples.quickstart.service.xmlbeans; import samples.quickstart.service.xmlbeans.xsd.GetPriceDocument; import samples.quickstart.service.xmlbeans.xsd.GetPriceResponseDocument; import samples.quickstart.service.xmlbeans.xsd.UpdateDocument; import java.util.HashMap; public class StockQuoteServiceSkeleton implements StockQuoteServiceSkeletonInterface { private static HashMap map; static{ map = new HashMap(); } public void update(UpdateDocument param0) { map.put(param0.getUpdate().getSymbol(), new Double(param0.getUpdate().getPrice())); } public GetPriceResponseDocument getPrice(GetPriceDocument param1) { Double price = (Double) map.get(param1.getGetPrice().getSymbol()); double ret = 42; if(price != null){ ret = price.doubleValue(); } System.err.println(); GetPriceResponseDocument resDoc = GetPriceResponseDocument.Factory.newInstance(); GetPriceResponseDocument.GetPriceResponse res = resDoc.addNewGetPriceResponse(); res.setReturn(ret); return resDoc; } }
通過在build / service目錄中鍵入以下命令來構建項目,該目錄包含build.xml文件:
ant jar.server
如果一切順利,您應該在窗口中看到BUILD SUCCESSFUL消息,並在新創建的build / service / build / lib目錄中看到StockQuoteService.aar文件。將此文件復制到servlet引擎的webapps / axis2 / WEB-INF / services目錄。
您可以通過查看服務列表來檢查以確保服務已正確部署,
http://localhost:8080/axis2/services/listServices
您還可以在以下位置檢查自定義WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
schema
http://localhost:8080/axis2/services/StockQuoteService?xsd
使用JiBX生成服務
要使用JiBX數據綁定生成和部署服務,請執行以下步驟。
通過在Axis2_HOME / samples / quickstartjibx目錄中的控制台上鍵入以下內容,使用WSDL2Java實用程序生成框架
%AXIS2_HOME%\bin\wsdl2java.bat -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.service.jibx -d jibx -s -ss -sd -ssi -uw -o build\service
否則,只需在Axis2_HOME / samples / quickstartjibx目錄中鍵入“ant generate.service”即可。
選項-d jibx指定JiBX數據綁定。-s開關僅指定同步或阻塞調用。-ss開關創建服務器端代碼(框架和相關文件)。-sd開關創建服務描述符(services.xml文件)。-ssi開關為服務框架創建一個接口。-uw開關打開傳入和傳出服務操作的參數,以創建更自然的編程接口。
運行WSDL2Java后,服務文件應位於build / service。如果直接使用WSDL2Java生成代碼,則需要修改生成的框架以實現服務(如果使用“ant generate.service”,則完成的框架將自動復制到生成的框架上)。打開build / service / src / samples / quickstart / service / jibx / StockQuoteServiceSkeleton.java文件並對其進行修改,以將服務的功能添加到生成的方法中,如代碼清單8所示。
代碼8:定義服務框架文件
package samples.quickstart.service.jibx; import java.util.HashMap; public class StockQuoteServiceSkeleton implements StockQuoteServiceSkeletonInterface { private HashMap map = new HashMap(); public void update(String symbol, Double price) { map.put(symbol, price); } public Double getPrice(String symbol) { Double ret = (Double) map.get(symbol); if (ret == null) { ret = new Double(42.0); } return ret; } }
現在,您可以通過在build / service目錄中鍵入以下命令來構建項目:
ant jar.server
如果一切順利,您應該在窗口中看到BUILD SUCCESSFUL消息,並在build / service / build / lib目錄中看到StockQuoteService.aar文件。將此文件復制到servlet引擎的webapps / axis2 / WEB-INF / services目錄。
您可以通過查看服務列表來檢查以確保服務已正確部署,
http://localhost:8080/axis2/services/listServices
您還可以在以下位置檢查自定義WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
schema
http://localhost:8080/axis2/services/StockQuoteService?xsd
更多學習信息:JiBX code generation integration
創建客戶端
在本節中,我們將介紹基於StockQuoteService類創建客戶端的四種方法:構建基於AXIOM的客戶端,使用Axis2數據綁定框架(ADB)生成客戶端,使用XMLBeans生成客戶端,以及使用JiBX生成客戶端。
使用AXIOM創建客戶端
要使用AXIOM構建客戶端,請執行以下步驟。
另請注意“使用AXIOM創建服務”部分中顯示的目錄結構,下面重復完整性。
- quickstartaxiom - README.txt - build.xml - resources - META-INF - services.xml - StockQuoteService.wsdl - src - samples - quickstart - service - axiom - StockQuoteService.java - clients - AXIOMClient.java
上面引用的AXIOMClient.java類定義如下,如代碼清單9所示。
代碼9:使用AXIOM的AXIOMClient類
package samples.quickstart.clients; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axis2.Constants; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; public class AXIOMClient { private static EndpointReference targetEPR = new EndpointReference("http://localhost:8080/axis2/services/StockQuoteService"); public static OMElement getPricePayload(String symbol) { OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd", "tns"); OMElement method = fac.createOMElement("getPrice", omNs); OMElement value = fac.createOMElement("symbol", omNs); value.addChild(fac.createOMText(value, symbol)); method.addChild(value); return method; } public static OMElement updatePayload(String symbol, double price) { OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd", "tns"); OMElement method = fac.createOMElement("update", omNs); OMElement value1 = fac.createOMElement("symbol", omNs); value1.addChild(fac.createOMText(value1, symbol)); method.addChild(value1); OMElement value2 = fac.createOMElement("price", omNs); value2.addChild(fac.createOMText(value2, Double.toString(price))); method.addChild(value2); return method; } public static void main(String[] args) { try { OMElement getPricePayload = getPricePayload("WSO"); OMElement updatePayload = updatePayload("WSO", 123.42); Options options = new Options(); options.setTo(targetEPR); options.setTransportInProtocol(Constants.TRANSPORT_HTTP); ServiceClient sender = new ServiceClient(); sender.setOptions(options); sender.fireAndForget(updatePayload); System.err.println("price updated"); OMElement result = sender.sendReceive(getPricePayload); String response = result.getFirstElement().getText(); System.err.println("Current price of WSO: " + response); } catch (Exception e) { e.printStackTrace(); } } }
Axis2使用AXIOM,或AXIs對象模型,類似於DOM(文檔對象模型)的結構,它基於StAX API(用於XML的Streaming API)。在這里,您可以為服務的更新和getPrice方法設置有效負載。創建有效負載的方式類似於為AXIOM服務創建getPriceResponse有效負載的方式。然后設置Options類,並創建一個ServiceClient,用於與服務進行通信。首先調用update方法,這是一個不返回任何內容的fireAndForget方法。最后,您調用getPrice方法,並從服務中檢索當前價格並顯示它。
現在,您可以通過在Axis2_HOME / samples / quickstartaxiom目錄中鍵入ant run.client來構建和運行AXIOM客戶端。
您應該獲得以下輸出:
done
Current price of WSO: 123.42
使用ADB生成客戶端
要使用Axis Data Binding(ADB)構建客戶端,請執行以下步驟。
通過在Axis2_HOME / samples / quickstartadb目錄中鍵入以下內容來生成客戶端數據綁定:
%AXIS2_HOME%\bin\wsdl2java.bat -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.clients -d adb -s -o build\client
另外,只需在Axis2_HOME / samples / quickstartadb目錄中輸入ant generate.client即可。
接下來看一下quickstartadb / src / samples / quickstart / clients / ADBClient.java,看看它是如何在代碼清單10中定義的。
代碼10:ADBClient類
package samples.quickstart.clients; import samples.quickstart.service.adb.StockQuoteServiceStub; public class ADBClient{ public static void main(java.lang.String args[]){ try{ StockQuoteServiceStub stub = new StockQuoteServiceStub ("http://localhost:8080/axis2/services/StockQuoteService"); getPrice(stub); update(stub); getPrice(stub); } catch(Exception e){ e.printStackTrace(); System.err.println("\n\n\n"); } } /* fire and forget */ public static void update(StockQuoteServiceStub stub){ try{ StockQuoteServiceStub.Update req = new StockQuoteServiceStub.Update(); req.setSymbol ("ABC"); req.setPrice (42.35); stub.update(req); System.err.println("price updated"); } catch(Exception e){ e.printStackTrace(); System.err.println("\n\n\n"); } } /* two way call/receive */ public static void getPrice(StockQuoteServiceStub stub){ try{ StockQuoteServiceStub.GetPrice req = new StockQuoteServiceStub.GetPrice(); req.setSymbol("ABC"); StockQuoteServiceStub.GetPriceResponse res = stub.getPrice(req); System.err.println(res.get_return()); } catch(Exception e){ e.printStackTrace(); System.err.println("\n\n\n"); } } }
此類使用您創建的Axis Data Bindings創建客戶端存根。然后它調用Web服務上的getPrice和更新操作。getPrice方法操作創建GetPrice有效內容並將符號設置為ABC。然后它發送請求並顯示當前價格。update方法創建Update有效負載,將符號設置為ABC,價格設置為42.35。
現在通過在Axis2_HOME / samples / quickstartadb目錄中鍵入ant run.client來構建和運行客戶端。
您應該獲得以下輸出:
42
price updated
42.35
使用XMLBeans生成客戶端
要使用XML Bean數據綁定構建客戶端,請執行以下步驟。
通過在xmlbeansClient目錄中鍵入以下內容來生成數據庫。
%AXIS2_HOME%\bin\wsdl2java.bat -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.service.xmlbeans -d xmlbeans -s -o build\client
另外,只需在Axis2_HOME / samples / quickstartxmlbeans目錄中鍵入ant generate.client即可。
請注意,這會創建客戶端存根代碼而不會創建服務器端代碼。
接下來看一下quickstartxmlbeans / src / samples / quickstart / clients / XMLBEANSClient.java,看看它是如何在代碼清單11中定義的。
代碼11:XMLBEANSClient類
package samples.quickstart.clients; import samples.quickstart.service.xmlbeans.StockQuoteServiceStub; import samples.quickstart.service.xmlbeans.xsd.GetPriceDocument; import samples.quickstart.service.xmlbeans.xsd.GetPriceResponseDocument; import samples.quickstart.service.xmlbeans.xsd.UpdateDocument; public class XMLBEANSClient{ public static void main(java.lang.String args[]){ try{ StockQuoteServiceStub stub = new StockQuoteServiceStub ("http://localhost:8080/axis2/services/StockQuoteService"); getPrice(stub); update(stub); getPrice(stub); } catch(Exception e){ e.printStackTrace(); System.err.println("\n\n\n"); } } /* fire and forget */ public static void update(StockQuoteServiceStub stub){ try{ UpdateDocument reqDoc = UpdateDocument.Factory.newInstance(); UpdateDocument.Update req = reqDoc.addNewUpdate(); req.setSymbol ("BCD"); req.setPrice (42.32); stub.update(reqDoc); System.err.println("price updated"); } catch(Exception e){ e.printStackTrace(); System.err.println("\n\n\n"); } } /* two way call/receive */ public static void getPrice(StockQuoteServiceStub stub){ try{ GetPriceDocument reqDoc = GetPriceDocument.Factory.newInstance(); GetPriceDocument.GetPrice req = reqDoc.addNewGetPrice(); req.setSymbol("BCD"); GetPriceResponseDocument res = stub.getPrice(reqDoc); System.err.println(res.getGetPriceResponse().getReturn()); } catch(Exception e){ e.printStackTrace(); System.err.println("\n\n\n"); } } }
此類使用您創建的XML Beans數據綁定創建客戶端存根。然后它調用Web服務上的getPrice和更新操作。getPrice方法操作創建GetPriceDocument,其內部GetPrice類並將符號設置為ABC。然后它發送請求並檢索GetPriceResponseDocument並顯示當前價格。update方法創建一個UpdateDocument,更新並將符號設置為ABC並將價格設置為42.32,完成后顯示“done”。
現在通過在Axis2_HOME / samples / quickstartxmlbeans目錄中鍵入ant run.client來構建和運行項目。
您應該獲得以下輸出:
42
price updated
42.32
使用JiBX生成客戶端
要使用JiBX構建客戶端,請執行以下步驟。
通過在Axis2_HOME / samples / quickstartjibx目錄中的控制台上鍵入以下內容來生成客戶端存根。
%AXIS2_HOME%\bin\wsdl2java.bat -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.clients -d jibx -s -uw -o build\client
否則,只需輸入“ant generate.client”即可。
接下來看一下quickstartjibx / src / samples / quickstart / clients / JiBXClient.java,如下面的代碼清單12所示。
代碼12:JiBXClient類
package samples.quickstart.clients; import samples.quickstart.service.jibx.StockQuoteServiceStub; public class JiBXClient{ public static void main(java.lang.String args[]){ try{ StockQuoteServiceStub stub = new StockQuoteServiceStub ("http://localhost:8080/axis2/services/StockQuoteService"); getPrice(stub); update(stub); getPrice(stub); } catch(Exception e){ e.printStackTrace(); System.err.println("\n\n\n"); } } /* fire and forget */ public static void update(StockQuoteServiceStub stub){ try{ stub.update("CDE", new Double(42.35)); System.err.println("price updated"); } catch(Exception e){ e.printStackTrace(); System.err.println("\n\n\n"); } } /* two way call/receive */ public static void getPrice(StockQuoteServiceStub stub){ try{ System.err.println(stub.getPrice("CDE")); } catch(Exception e){ e.printStackTrace(); System.err.println("\n\n\n"); } } }
此類使用創建的JiBX客戶端存根來訪問Web服務上的getPrice和更新操作。getPrice方法發送股票“ABC”的請求並顯示當前價格。更新方法將庫存“ABC”的價格設置為42.35。
現在通過在Axis2_HOME / samples / quickstartjibx目錄中的控制台鍵入“ant run.client”來構建和運行客戶端。
您應該獲得以下輸出:
42
price updated
42.35
更多信息,JiBX code generation integration
摘要
Axis2提供了一種靈活而強大的方式,可以立即啟動和運行Web服務。本指南介紹了創建可在Axis2上部署的服務的五種方法,以及創建與服務進行通信的客戶端的四種方法。您現在可以使用各種不同的技術靈活地創建Web服務。
進一步研究
Apache Axis2簡介 - http://www.redhat.com/magazine/021jul06/features/apache_axis2/