国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Axis2快速上手指南

原文鏈接:http://ws.apache.org/axis2/1_1_1/quickstartguide.html
本指南的目的是讓你盡可能快的創(chuàng)建使用Axis2的服務(wù)和客戶端,我們將使用一個簡單的StockQuote服務(wù)并顯示給你一些創(chuàng)建和部署它
的不同的方式,以及快速的看看Axis2自帶的一些工具,然后我們將看看創(chuàng)建訪問這些服務(wù)的客戶端。

內(nèi)容

代碼
  1. 介紹  
  2. 做好準(zhǔn)備  
  3. Axis2服務(wù)  
  4. 創(chuàng)建服務(wù)  
  5.     部署POJOs  
  6.     使用AXIOM構(gòu)建服務(wù)  
  7.     使用ADB生成服務(wù)  
  8.     使用XMLBeans生成服務(wù)  
  9.     使用JiBX生成服務(wù)  
  10. 生成客戶端  
  11.     使用AXIOM創(chuàng)建一個客戶端  
  12.     使用ADB生成一個客戶端  
  13.     使用XMLBeans生成一個客戶端  
  14.     使用JiBX生成一個客戶端  
  15. 總結(jié)  
  16. 進一步學(xué)習(xí)  

快速安裝筆記:
文檔的代碼可以在解壓的標(biāo)準(zhǔn)二進制發(fā)布[/url]找到,更明確的位于其中的Axis2_HOME/samples/目錄-quickstart,quickstartdb,
quickstartaxiom,quickstartjibx和quickstartxmlbeans,如果你繼續(xù)下去它將幫你掌握它。它包含一個Ant構(gòu)建文件(build.xml)
貫穿所有的例子我們將提到它來使得編譯更容易。

介紹
讓我們以服務(wù)本身開始。我們將使它簡單,所以你可以看到當(dāng)我們構(gòu)建并部署服務(wù)時會發(fā)生什么,一個StockQuoteService例子看起來
像這個,所以讓我們使用下面的(參看Code Listing 1)。
Code Listing 1: StockQuoteService類

代碼
  1. package samples.quickstart.service.pojo;  
  2.   
  3. import java.util.HashMap;  
  4.   
  5. public class StockQuoteService {  
  6.     private HashMap map = new HashMap();  
  7.   
  8.     public double getPrice(String symbol) {  
  9.         Double price = (Double) map.get(symbol);  
  10.         if(price != null){  
  11.             return price.doubleValue();  
  12.         }  
  13.         return 42.00;  
  14.     }  
  15.   
  16.     public void update(String symbol, double price) {  
  17.         map.put(symbol, new Double(price));  
  18.     }  
  19. }  

它將為一個具有兩個可能的調(diào)用的簡單服務(wù),其中一個是一個in/out消息,另一個則為一個只能in的服務(wù),最終我們將打包服務(wù)并用
四種不同的方式部署部署它。
首先,讓我們看看這個簡單的Java類怎樣響應(yīng)一個服務(wù)。

做好準(zhǔn)備
在我們使用Axis2構(gòu)建任何東西之前,我們將需要關(guān)注一些家務(wù)事?,F(xiàn)在你將需要準(zhǔn)備好你使用Axis2的環(huán)境,幸運的是,它只包括一
些簡單的步驟:
1,下載并安裝Java(版本至少為JDK1.4)
2,下載Axis2并解壓到一個目標(biāo)目錄
3,復(fù)制axis2.war文件到你的servlet引擎的webapps目錄
4,設(shè)置AXIS2_HOME環(huán)境變量來指出目標(biāo)目錄,注意Axis2生成的所有腳本和構(gòu)建文件依賴于這個值,所以不要遺漏了這個步驟。
大多數(shù)情況下,我們的服務(wù)也將需要一個WSDL文件,Axis2的Java2WSDL可以用來生成一個WSDL。執(zhí)行以下步驟來從一個Java類生成一
個WSDL文件:
1,創(chuàng)建并編譯Java類
2,使用該命令生成WSDL:
%AXIS2_HOME%/bin/java2wsdl -cp . -cn samples.quickstart.service.pojo.StockQuoteService -of StockQuoteService.wsdl
移動你生成WSDL文件,你可以做你需要的任何更改。例如,你可能添加自定義的過錯或者改變生成的元素名。例如,該StockQuoteSer
vice.wsdl位于%AXIS2_HOME%/samples/quickstartadb/resources/META-INF文件夾,我們將在本指南的其他部分使用它,代替生成過
程創(chuàng)建的一般參數(shù)。

Axis2服務(wù)
在我們構(gòu)建任何東西之前,理解最終產(chǎn)品看起來像什么是有用的。Axis2的服務(wù)器端可以被部署在任何Servlet引擎上,并且有如下的
Code Listing 2顯示的結(jié)構(gòu)。
Code Listing 2: axis2.war的目錄結(jié)構(gòu)

代碼
  1. axis2-web   
  2. META-INF  
  3. WEB-INF  
  4.     classes   
  5.     conf  
  6.         axis2.xml   
  7.     lib  
  8.         activation.jar  
  9.         ...  
  10.         xmlSchema.jar  
  11.     modules  
  12.         modules.list   
  13.         addressing.mar  
  14.         ...  
  15.         soapmonitor.mar  
  16.     services  
  17.         services.list  
  18.         aservice.aar  
  19.         ...  
  20.         version.aar  
  21.     web.xml  

從最上面開始,axis2-web是組成Axis2管理程序的一些JSPs,你可以通過它來執(zhí)行任何需要的動作,例如添加服務(wù),使用模塊和禁止
模塊。WEB-INF包含了運行部署到服務(wù)目錄的任何服務(wù)的實際上的java類和其他支持文件。
這里主要的文件是axis2.xml,它控制程序怎樣與接收的消息打交道,決定Axis2是否需要使用模塊目錄里定義的任何模塊。
這里你可以看到,服務(wù)可以被部署為*.aar文件,但是它們的內(nèi)容必須以一個特殊的方式安排。例如,服務(wù)的結(jié)構(gòu)將為如下:
代碼
  1. - StockQuoteService  
  2.    - META-INF  
  3.      - services.xml  
  4.    - samples  
  5.      - quickstart  
  6.        - service  
  7.          - pojo  
  8.            - StockQuoteService.class  

這不是太復(fù)雜,服務(wù)的名字為StockQuoteService,它在services.xml中指定,并且根據(jù)包名把任何Java類放到合適的位置。META-INF
目錄包含關(guān)于Axis2需要來正確執(zhí)行服務(wù)的額外信息。services.xml文件定義了服務(wù)本身并把Java類鏈接到它(參看Code Listing 3)。
Code Listing 3: 服務(wù)定義文件
代碼
  1. <service name="StockQuoteService" scope="application">  
  2.     <description>  
  3.         Stock Quote Sample Service  
  4.     </description>  
  5.     <messageReceivers>  
  6.         <messageReceiver   
  7.             mep="http://www.w3.org/2004/08/wsdl/in-only"  
  8.     class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>  
  9.         <messageReceiver  
  10.             mep="http://www.w3.org/2004/08/wsdl/in-out"  
  11.     class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>  
  12.     </messageReceivers>  
  13.     <parameter name="ServiceClass">  
  14.         samples.quickstart.service.pojo.StockQuoteService  
  15.     </parameter>  
  16. </service>  

這里你看到服務(wù)本身被定義了,以及不同的消息交換模式相關(guān)的messageReceiver類型。
META-INF目錄也是你打算包含在該程序中的自定義WSDL文件的位置。
你可以通過簡單的采用該文件目錄結(jié)構(gòu)并復(fù)制到你的servlet引擎的webapps目錄來部署一個服務(wù),這是著名的"爆發(fā)"形式,但是你也
可以壓縮你的文檔到一個*.aar文件,類似于一個*.jar文件,并直接將*.aar文件放到servlet引擎的webapps目錄。
既然你理解了我們在嘗試完成什么,我們幾乎準(zhǔn)備好開始構(gòu)建了。
首先,下載并解壓合適版本的Axis2標(biāo)準(zhǔn)二進制發(fā)布。確認(rèn)你設(shè)置了AXIS2_HOME變量的值來匹配你解壓該版本內(nèi)容的位置。
讓我們看看一些創(chuàng)建客戶端和服務(wù)的不同方式。

創(chuàng)建服務(wù)
在這個部分,我們將看看根據(jù)StockQuoteService類創(chuàng)建服務(wù)的五種方式:部署Plain Old Java Objects(POJO),使用AXIOM的OMElement
構(gòu)建服務(wù),使用Axis2 Databinding Framework(ADB)生成服務(wù),使用XMLBeans生成服務(wù)和使用JiBX生成服務(wù)。

部署POJOs
使用POJOs(Plain Old Java Objects)來部署服務(wù),執(zhí)行下面的步驟。
注意包含在<AXIS2_HOME>/samples/quickstart的目錄結(jié)構(gòu)(services.xml文件來自于該指南的第一個部分):

代碼
  1. - quickstart  
  2.    - README.txt  
  3.    - build.xml  
  4.    - resources  
  5.      - META-INF  
  6.        - services.xml  
  7.    - src  
  8.      - samples  
  9.        - quickstart  
  10.          - service  
  11.            - pojo  
  12.              - StockQuoteService.java  

注意你可以通過在quickstart目錄鍵入ant generate.wsdl來生成WSDL。
盡管如此,創(chuàng)建StockQuoteService.wsdl是可選的。它可以是直接從Java類生成的版本,或者該文件的一個自定義版本,并且servi
ces.xml是本文檔前面提到的同一文件。
現(xiàn)在通過在quickstart目錄鍵入ant generate.service來構(gòu)建工程,該目錄創(chuàng)建了以下目錄結(jié)構(gòu):
代碼
  1. - quickstart/build/classes  
  2.    - META-INF  
  3.      - services.xml  
  4.    - samples  
  5.      - quickstart  
  6.        - service  
  7.          - pojo  
  8.            - StockQuoteService.class  

如果你想以爆發(fā)形式部署服務(wù),重命名classes目錄為StockQuoteService,并復(fù)制它到你的servlet引擎的webapps/axis2/WEB-INF/s
ervices目錄。否則,復(fù)制build/StockQuoteService.aar文件到你的servlet引擎的webapps/axis2/WEB-INF/services目錄。然后通過
視察以下服務(wù)列表來確認(rèn)服務(wù)被正確部署:
http://localhost:8080/axis2/services/listServices
你也可以檢驗以下WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
以及以下結(jié)構(gòu):
http://localhost:8080/axis2/services/StockQuoteService?xsd
一旦這些urls工作,讓我們快速測試一下服務(wù)。讓你的瀏覽器訪問以下URL試試:
http://localhost:8080/axis2/rest/StockQuoteService/getPrice?symbol=IBM
你將得到如下應(yīng)答:
代碼
  1. <ns:getPriceResponse xmlns:ns="http://pojo.service.quickstart.samples/xsd"><ns:return>42</ns:return></ns:getPriceResponse>  

如果你像這樣調(diào)用update方法:
http://localhost:8080/axis2/rest/StockQuoteService/update?symbol=IBM&price=100
然后調(diào)用第一個getPrice url。你可以看到price被更新了。

使用AXIOM構(gòu)建服務(wù)
為了使用AXIOM"從零開始"構(gòu)建一個服務(wù),執(zhí)行以下步驟。
注意包含在/samples/quickstartaxiom的目錄結(jié)構(gòu):

代碼
  1. - quickstartaxiom  
  2.    - README.txt  
  3.    - build.xml  
  4.    - resources  
  5.      - META-INF  
  6.        - services.xml  
  7.        - StockQuoteService.wsdl  
  8.    - src  
  9.      - samples  
  10.        - quickstart  
  11.          - service  
  12.            - axiom  
  13.              - StockQuoteService.java  
  14.          - clients  
  15.            - AXIOMClient.java  

由于AXIOM有一點不同,你將需要一個與POJO所用不同的services.xml文件,在Code Listing 4中顯示了它的定義。
Code Listing 4: 服務(wù)定義文件
代碼
  1. <service name="StockQuoteService" scope="application">  
  2.     <description>  
  3.         Stock Quote Service  
  4.     </description>  
  5.     <operation name="getPrice">  
  6.         <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>  
  7.     </operation>  
  8.     <operation name="update">  
  9.         <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/>  
  10.     </operation>  
  11.     <parameter name="ServiceClass">samples.quickstart.service.axiom.StockQuoteService</parameter>  
  12. </service>  

注意,幾乎是一樣的,除了操作是顯示地定義在service.xml文件中,而且MessageReceiver現(xiàn)在是RawXML。
現(xiàn)在,上面提到的簡單的使用Axis2庫的類的StockQuoteService.java類,在Code Listing 5中定義。
Code Listing 5:使用AXIOM的StockQuoteService類
代碼
  1. package samples.quickstart.service.axiom;  
  2.   
  3. import javax.xml.stream.XMLStreamException;  
  4. import org.apache.axiom.om.OMAbstractFactory;  
  5. import org.apache.axiom.om.OMElement;  
  6. import org.apache.axiom.om.OMFactory;  
  7. import org.apache.axiom.om.OMNamespace;  
  8.   
  9. import java.util.HashMap;  
  10. public class StockQuoteService {  
  11.     private HashMap map = new HashMap();  
  12.   
  13.     public OMElement getPrice(OMElement element) throws XMLStreamException {  
  14.         element.build();  
  15.         element.detach();  
  16.   
  17.         OMElement symbolElement = element.getFirstElement();  
  18.         String symbol = symbolElement.getText();  
  19.   
  20.         String returnText = "42";  
  21.         Double price = (Double) map.get(symbol);  
  22.         if(price != null){  
  23.             returnText  = "" + price.doubleValue();  
  24.         }  
  25.         OMFactory fac = OMAbstractFactory.getOMFactory();  
  26.         OMNamespace omNs =  
  27.             fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd""tns");  
  28.         OMElement method = fac.createOMElement("getPriceResponse", omNs);  
  29.         OMElement value = fac.createOMElement("price", omNs);  
  30.         value.addChild(fac.createOMText(value, returnText));  
  31.         method.addChild(value);  
  32.         return method;  
  33.     }  
  34.   
  35.     public void update(OMElement element) throws XMLStreamException {  
  36.         element.build();  
  37.         element.detach();  
  38.   
  39.         OMElement symbolElement = element.getFirstElement();  
  40.         String symbol = symbolElement.getText();  
  41.   
  42.         OMElement priceElement = (OMElement)symbolElement.getNextOMSibling();  
  43.         String price = priceElement.getText();  
  44.   
  45.         map.put(symbol, new Double(price));  
  46.     }  
  47. }  

Axis2使用AXIOM,或者AXIs Object Model,一個基于StAX API(Streaming API for XML)的DOM(Document Object Model)類似的結(jié)構(gòu)
作為服務(wù)的方法必須使用OMElement作為它們的參數(shù),OMElement表示一個XML元素,在這里它則為進來的SOAP消息的有效載荷。這里,
你提取有效載荷元素的第一個孩子,添加文本給它,并使用它作為返回的OMElement的內(nèi)容。除非這是一個"只有in"的服務(wù),這些方法
必須返回一個OMElement,因為它成為返回的SOAP消息的有效載荷。
現(xiàn)在通過在Axis2_HOME/samples/quickstartaxiom目錄鍵入ant generate.service來構(gòu)建工程。
把StockQuoteService.aar文件放在servlet引擎的webapps/axis2/WEB-INF/services目錄,通過視察下面的服務(wù)列表來確認(rèn)服務(wù)正確
部署:
http://localhost:8080/axis2/services/listServices
你也可以檢驗以下WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
以及以下結(jié)構(gòu):
http://localhost:8080/axis2/services/StockQuoteService?xsd

使用ADB生成服務(wù)
執(zhí)行以下步驟來使用Axis2 Databinding Framework(ADB)生成和部署服務(wù)。
通過在Axis2_HOME/samples/quickstartadb目錄鍵入以下內(nèi)容來使用WSDL2Java工具生成骨架:
%AXIS2_HOME%/bin/WSDL2Java -uri resources/META-INF/StockQuoteService.wsdl -p samples.quickstart.adb -d adb -s -ss
-sd -ssi -o build/service

或者在Axis2_HOME/samples/quickstartadb目錄簡單的鍵入ant generate.service
選項-d adb指定了Axis Data Binding(ADB)。-s轉(zhuǎn)換指定同步或者只模塊化調(diào)用。-ss轉(zhuǎn)換創(chuàng)建服務(wù)器端代碼(骨架和相關(guān)文件)。-sd
轉(zhuǎn)換創(chuàng)建一個服務(wù)描述符(services.xml文件)。-ssi轉(zhuǎn)換為服務(wù)骨架創(chuàng)建一個接口。服務(wù)文件現(xiàn)在應(yīng)該定位于build/service。
如果你通過使用WSDL2Java直接生成代碼,下一步你需要修改生成的骨架來實現(xiàn)服務(wù)(如果你使用"ant generate.service",一個完全
的骨架會自動復(fù)制并覆蓋生成的那個)。
打開build/service/src/samples/quickstart/adb/service/StockQuoteServiceSkeleton.java文件并修改它來添加你的服務(wù)的功能性
到生成的方法,下面的Code Listing 6顯示了。
Code Listing 6:定義服務(wù)骨架文件

代碼
  1. package samples.quickstart.service.adb;  
  2.   
  3. import samples.quickstart.service.adb.xsd.GetPriceResponse;  
  4. import samples.quickstart.service.adb.xsd.Update;  
  5. import samples.quickstart.service.adb.xsd.GetPrice;  
  6.   
  7. import java.util.HashMap;  
  8.   
  9. public class StockQuoteServiceSkeleton {  
  10.   
  11.     private static HashMap map;  
  12.   
  13.     static{ map = new HashMap(); }  
  14.   
  15.     public void update(Update param0) {  
  16.         map.put(param0.getSymbol(), new Double(param0.getPrice()));  
  17.     }  
  18.   
  19.     public GetPriceResponse getPrice(GetPrice param1) {  
  20.         Double price = (Double) map.get(param1.getSymbol());  
  21.         double ret = 42;  
  22.         if(price != null){  
  23.             ret = price.doubleValue();  
  24.         }  
  25.         GetPriceResponse res =  
  26.                 new GetPriceResponse();  
  27.         res.set_return(ret);  
  28.         return res;  
  29.     }  
  30. }  

現(xiàn)在你可以通過在build/service目錄鍵入以下命令構(gòu)建工程:ant jar.server
如果一切進展順利,你應(yīng)該在你的窗口看到BUILD SUCCESSFUL消息,而且StockQuoteService.aar文件在build/service/build/lib
目錄中。復(fù)制該文件到servlet引擎的webapps/axis2/WEB-INF/services目錄。
你可以通過視察下面的服務(wù)列表來確認(rèn)服務(wù)正確部署:
http://localhost:8080/axis2/services/listServices
你也可以檢驗以下WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
以及以下結(jié)構(gòu):
http://localhost:8080/axis2/services/StockQuoteService?xsd

使用XMLBeans生成服務(wù)
執(zhí)行以下步驟來使用XMLBeans生成服務(wù)。
通過在Axis2_HOME/samples/quickstartxmlbeans目錄鍵入以下命令來使用WSDL2Java工具生成骨架:
%AXIS2_HOME%/bin/WSDL2Java -uri resources/META-INF/StockQuoteService.wsdl -p samples.quickstart.service.xmlbeans
-d xmlbeans -s -ss -sd -ssi -o build/service

或者在Axis2_HOME/sampels/quickstartxmlbeans目錄簡單的鍵入ant generate.service
選項-d xmlbeans指定XMLBeans數(shù)據(jù)綁定。-s轉(zhuǎn)換指定同步或者只是模塊化調(diào)用。-ss轉(zhuǎn)換創(chuàng)建服務(wù)器端代碼(骨架和相關(guān)文件)。-sd
轉(zhuǎn)換創(chuàng)建一個服務(wù)描述符(services.xml文件)。-ssi轉(zhuǎn)換創(chuàng)建一個服務(wù)骨架的接口。現(xiàn)在服務(wù)文件應(yīng)該位于build/service。
如果你通過使用WSDL2Java直接生成代碼,下一步你需要修改生成的骨架來實現(xiàn)服務(wù)(如果你使用"ant generate.service",一個完全
的骨架將被自動復(fù)制并覆蓋生成的那個)。
下一步打開build/service/src/samples/quickstart/service/xmlbeans/StockQuoteServiceSkeleton.java文件并修改它來添加你的
服務(wù)的功能性到生成的方法(參看Code Listing 7)。
Code Listing 7:定義服務(wù)骨架

代碼
  1. package samples.quickstart.service.xmlbeans;  
  2.   
  3. import samples.quickstart.service.xmlbeans.xsd.GetPriceDocument;  
  4. import samples.quickstart.service.xmlbeans.xsd.GetPriceResponseDocument;  
  5. import samples.quickstart.service.xmlbeans.xsd.UpdateDocument;  
  6.   
  7. import java.util.HashMap;  
  8.   
  9. public class StockQuoteServiceSkeleton implements StockQuoteServiceSkeletonInterface {  
  10.   
  11.     private static HashMap map;  
  12.   
  13.     static{ map = new HashMap(); }  
  14.   
  15.     public void update(UpdateDocument param0) {  
  16.     }  
  17.   
  18.     public GetPriceResponseDocument getPrice(GetPriceDocument param1) {  
  19.     }  
  20. }  

通過在build/service目錄鍵入命令ant jar.server構(gòu)建項目,該目錄包含build.xml文件。
如果一切進展順利,你應(yīng)該在你的窗口看到BUILD SUCCESSFUL消息,而且StockQuoteService.aar文件位于新創(chuàng)建的build/service/
build/lib目錄。復(fù)制該文件到servlet引擎的webapps/axis2/WEB-INF/services目錄。
你可以通過視察下面的服務(wù)列表來確認(rèn)服務(wù)正確部署:
http://localhost:8080/axis2/services/listServices
你也可以檢驗以下WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
以及以下結(jié)構(gòu):
http://localhost:8080/axis2/services/StockQuoteService?xsd

使用JiBX生成服務(wù)
執(zhí)行以下步驟來使用JiBX數(shù)據(jù)綁定生成和部署服務(wù)。
通過在Axis2_HOME/samples/quickstartjibx目錄的控制臺鍵入以下內(nèi)容來使用WSDL2Java工具生成骨架:
%AXIS2_HOME%/bin/wsdl2java -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數(shù)據(jù)綁定。-s轉(zhuǎn)換指定同步或者只是模塊化調(diào)用。-ss轉(zhuǎn)換創(chuàng)建服務(wù)器端代碼(骨架和相關(guān)文件)。-sd轉(zhuǎn)換創(chuàng)建
一個服務(wù)描述符(services.xml文件)。-ssi轉(zhuǎn)換創(chuàng)建服務(wù)骨架的接口。-uw轉(zhuǎn)換解開傳遞給服務(wù)操作和從服務(wù)操作傳遞出去的參數(shù),來
創(chuàng)建一個更自然的編程接口。
在運行WSDL2Java后,服務(wù)文件應(yīng)該位于build/service。如果你通過使用WSDL2Java直接生成代碼,下一步你需要修改生成的骨架來
實現(xiàn)服務(wù)(如果你使用"ant generate.service"則一個完全的骨架將自動被復(fù)制并覆蓋生成的那個)。打開build/service/src/samples
/quickstart/service/jibx/StockQuoteServiceSkeleton.java文件并修改它來添加你的服務(wù)的功能性到生成的方法,在Code Listing
8中顯示了。
Code Listing 8:定義服務(wù)骨架文件

代碼
  1. package samples.quickstart.service.jibx;  
  2.   
  3. import java.util.HashMap;  
  4.   
  5. public class StockQuoteServiceSkeleton implements StockQuoteServiceSkeletonInterface {  
  6.     private HashMap map = new HashMap();  
  7.   
  8.     public void update(String symbol, Double price) {  
  9.         map.put(symbol, price);  
  10.     }  
  11.   
  12.     public Double getPrice(String symbol) {  
  13.         Double ret = (Double) map.get(symbol);  
  14.         if (ret == null) {  
  15.             ret = new Double(42.0);  
  16.         }  
  17.         return ret;  
  18.     }  
  19. }  

現(xiàn)在你可以通過在build/service目錄鍵入命令ant jar.server構(gòu)建工程
如果一切進展順利,你應(yīng)該在你的窗口看到BUILD SUCCESSFUL消息,并且StockQuoteService.aar文件位于build/service/build/lib
目錄。復(fù)制該文件到servlet引擎的webapps/axis2/WEB-INF/services目錄。
你可以通過視察下面的服務(wù)列表來確認(rèn)服務(wù)正確部署:
http://localhost:8080/axis2/services/listServices
你也可以檢驗以下WSDL:
http://localhost:8080/axis2/services/StockQuoteService?wsdl
以及以下結(jié)構(gòu):
http://localhost:8080/axis2/services/StockQuoteService?xsd
對于和Axis2使用JiBX的更多信息,參考[urlhttp://ws.apache.org/axis2/1_1_1/jibx/jibx-quotegen-integration.html]JiBX代碼生成集成[/url]。你也可以檢查JiBX Axis2 Wiki頁面得到更多同Axis2使用
JiBX的更新信息。

創(chuàng)建客戶端
在這個部分,我們將看看基于StockQuoteService類創(chuàng)建客戶端的四種方式:構(gòu)建基于AXIOM的客戶端,使用Axis2 Databinding Frame
work(ADB)生成客戶端,使用XMLBeans生成客戶端,使用JiBX生成客戶端。

使用AXIOM創(chuàng)建一個客戶端
執(zhí)行以下步驟來使用AXIOM構(gòu)建一個客戶端。
也注意在使用AXIOM創(chuàng)建服務(wù)部分顯示的目錄結(jié)構(gòu),為了完整性下面的重復(fù)了。

代碼
  1. - quickstartaxiom  
  2.    - README.txt  
  3.    - build.xml  
  4.    - resources  
  5.      - META-INF  
  6.        - services.xml  
  7.        - StockQuoteService.wsdl  
  8.    - src  
  9.      - samples  
  10.        - quickstart  
  11.          - service  
  12.            - axiom  
  13.              - StockQuoteService.java  
  14.          - clients  
  15.            - AXIOMClient.java  

上面提到的AXIOMClient.java類的定義顯示在下面的Code Listing 9。
Code Listing 9:使用AXIOM的AXIOMClient類
代碼
  1. package samples.quickstart.clients;  
  2.   
  3. import org.apache.axiom.om.OMAbstractFactory;  
  4. import org.apache.axiom.om.OMElement;  
  5. import org.apache.axiom.om.OMFactory;  
  6. import org.apache.axiom.om.OMNamespace;  
  7. import org.apache.axis2.Constants;  
  8. import org.apache.axis2.addressing.EndpointReference;  
  9. import org.apache.axis2.client.Options;  
  10. import org.apache.axis2.client.ServiceClient;  
  11.   
  12. public class AXIOMClient {  
  13.   
  14.     private static EndpointReference targetEPR =   
  15.         new EndpointReference("http://localhost:8080/axis2/services/StockQuoteService");  
  16.   
  17.     public static OMElement getPricePayload(String symbol) {  
  18.         OMFactory fac = OMAbstractFactory.getOMFactory();  
  19.         OMNamespace omNs = fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd""tns");  
  20.   
  21.         OMElement method = fac.createOMElement("getPrice", omNs);  
  22.         OMElement value = fac.createOMElement("symbol", omNs);  
  23.         value.addChild(fac.createOMText(value, symbol));  
  24.         method.addChild(value);  
  25.         return method;  
  26.     }  
  27.   
  28.     public static OMElement updatePayload(String symbol, double price) {  
  29.         OMFactory fac = OMAbstractFactory.getOMFactory();  
  30.         OMNamespace omNs = fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd""tns");  
  31.   
  32.         OMElement method = fac.createOMElement("update", omNs);  
  33.   
  34.         OMElement value1 = fac.createOMElement("symbol", omNs);  
  35.         value1.addChild(fac.createOMText(value1, symbol));  
  36.         method.addChild(value1);  
  37.   
  38.         OMElement value2 = fac.createOMElement("price", omNs);  
  39.         value2.addChild(fac.createOMText(value2,  
  40.                                          Double.toString(price)));  
  41.         method.addChild(value2);  
  42.         return method;  
  43.     }  
  44.   
  45.     public static void main(String[] args) {  
  46.         try {  
  47.             OMElement getPricePayload = getPricePayload("WSO");  
  48.             OMElement updatePayload = updatePayload("WSO"123.42);  
  49.             Options options = new Options();  
  50.             options.setTo(targetEPR);  
  51.             options.setTransportInProtocol(Constants.TRANSPORT_HTTP);  
  52.   
  53.             ServiceClient sender = new ServiceClient();  
  54.             sender.setOptions(options);  
  55.   
  56.             sender.fireAndForget(updatePayload);  
  57.             System.err.println("done");  
  58.             OMElement result = sender.sendReceive(getPricePayload);  
  59.   
  60.             String response = result.getFirstElement().getText();  
  61.             System.err.println("Current price of WSO: " + response);  
  62.   
  63.         } catch (Exception e) {  
  64.             e.printStackTrace();  
  65.         }  
  66.     }  
  67.       
  68. }  

Axis2使用AXIOM,或者AXIs Object Model,一個基于StAX API(Streaming API for XML)的DOM(Document Object Model)類似的結(jié)構(gòu)
這里你為服務(wù)的update和getPrice方法建立有效載荷。有效載荷的創(chuàng)建類似于你為AXIOM服務(wù)創(chuàng)建getPriceResponse有效載荷。然后
你創(chuàng)建Options類,并創(chuàng)建用來與服務(wù)交流的ServiceClient。首先你調(diào)用update方法,一個什么也不返回的fireAndForget方法。最后
你調(diào)用getPrice方法,并從服務(wù)得到當(dāng)前價格并顯示它。
現(xiàn)在你可以通過在Axis2_HOME/samples/quickstartaxiom目錄鍵入ant run.client構(gòu)建并運行AXIOM客戶端。
你應(yīng)該得到以下輸出:
代碼
  1. done  
  2. Current price of WSO: 123.42  

使用ADB生成一個客戶端
執(zhí)行以下步驟來使用Axis Data Binding(ADB)構(gòu)建一個客戶端。
通過在Axis2_HOME/samples/quickstartadb目錄鍵入以下命令來生成客戶端數(shù)據(jù)綁定:
%AXIS2_HOME%/bin/WSDL2Java -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,并看看它在Code Listing 10中是怎樣定義的。
Code Listing 10:ADBClient類

代碼
  1. package samples.quickstart.clients;  
  2.   
  3. import samples.quickstart.service.adb.StockQuoteServiceStub;  
  4.   
  5. public class ADBClient{  
  6.     public static void main(java.lang.String args[]){  
  7.         try{  
  8.             StockQuoteServiceStub stub =  
  9.                 new StockQuoteServiceStub  
  10.                 ("http://localhost:8080/axis2/services/StockQuoteService");  
  11.   
  12.             getPrice(stub);  
  13.             update(stub);  
  14.   
  15.         } catch(Exception e){  
  16.             e.printStackTrace();  
  17.             System.err.println("\n\n\n");  
  18.         }  
  19.     }  
  20.   
  21.     /* fire and forget */  
  22.     public static void update(StockQuoteServiceStub stub){  
  23.         try{  
  24.             StockQuoteServiceStub.Update req = new StockQuoteServiceStub.Update();  
  25.             req.setSymbol ("ABC");  
  26.             req.setPrice (42.35);  
  27.   
  28.             stub.update(req);  
  29.             System.err.println("done");  
  30.         } catch(Exception e){  
  31.             e.printStackTrace();  
  32.             System.err.println("\n\n\n");  
  33.         }  
  34.     }  
  35.   
  36.     /* two way call/receive */  
  37.     public static void getPrice(StockQuoteServiceStub stub){  
  38.         try{  
  39.             StockQuoteServiceStub.GetPrice req = new StockQuoteServiceStub.GetPrice();  
  40.   
  41.             req.setSymbol("ABC");  
  42.   
  43.             StockQuoteServiceStub.GetPriceResponse res =  
  44.                 stub.getPrice(req);  
  45.   
  46.             System.err.println(res.get_return());  
  47.         } catch(Exception e){  
  48.             e.printStackTrace();  
  49.             System.err.println("\n\n\n");  
  50.         }  
  51.     }  
  52.   
  53. }  

該類使用你創(chuàng)建的Axis Data Bindings創(chuàng)建一個客戶端存根。然后它在Web服務(wù)上調(diào)用getPrice和update操作。getPrice方法操作創(chuàng)建
GetPrice有效載荷并設(shè)置symbol為ABC。然后它發(fā)送請求并顯示當(dāng)前價格。update方法創(chuàng)建一個Update有效載荷,設(shè)置symbol為ABC及
price為42.35。
現(xiàn)在通過在Axis2_HOME/samples/quickstartadb目錄鍵入ant run.client來構(gòu)建并運行客戶端。
你應(yīng)該得到以下輸出:
代碼
  1. 42  
  2. done  

使用XMLBeans生成一個客戶端
執(zhí)行以下步驟來使用XMLBeans數(shù)據(jù)綁定來構(gòu)建一個客戶端。
通過在xmlbeansClient目錄鍵入以下命令來生成數(shù)據(jù)綁定:
%AXIS2_HOME%/bin/WSDL2Java -uri resources/META-INF/StockQuoteService.wsdl -p samples.quickstart.service.xmlbeans -d
xmlbeans -s -o build/client

或者簡單的在Axis2_HOME/samples/quickstartxmlbeans目錄下鍵入ant generate.client。
注意這只會創(chuàng)建客戶端存根代碼而不會創(chuàng)建服務(wù)器端代碼。
下一步看看quickstartxmlbeans/src/samples/quickstart/clients/XMLBEANSClient.java,并在Code Listing 11看看它怎樣定義的
Code Listing 11:XMLBEANSClient類

代碼
  1. package samples.quickstart.clients;  
  2.   
  3. import samples.quickstart.service.xmlbeans.StockQuoteServiceStub;  
  4. import samples.quickstart.service.xmlbeans.xsd.GetPriceDocument;  
  5. import samples.quickstart.service.xmlbeans.xsd.GetPriceResponseDocument;  
  6. import samples.quickstart.service.xmlbeans.xsd.UpdateDocument;  
  7.   
  8. public class XMLBEANSClient{  
  9.   
  10.     public static void main(java.lang.String args[]){  
  11.         try{  
  12.             StockQuoteServiceStub stub =  
  13.                 new StockQuoteServiceStub  
  14.                 ("http://localhost:8080/axis2/services/StockQuoteService");  
  15.   
  16.             getPrice(stub);  
  17.             update(stub);  
  18.   
  19.         } catch(Exception e){  
  20.             e.printStackTrace();  
  21.             System.err.println("\n\n\n");  
  22.         }  
  23.     }  
  24.   
  25.     /* fire and forget */  
  26.     public static void update(StockQuoteServiceStub stub){  
  27.         try{  
  28.             UpdateDocument reqDoc = UpdateDocument.Factory.newInstance();  
  29.             UpdateDocument.Update req = reqDoc.addNewUpdate();  
  30.             req.setSymbol ("ABC");  
  31.             req.setPrice (42.32);  
  32.   
  33.             stub.update(reqDoc);  
  34.             System.err.println("done");  
  35.         } catch(Exception e){  
  36.             e.printStackTrace();  
  37.             System.err.println("\n\n\n");  
  38.         }  
  39.     }  
  40.   
  41.     /* two way call/receive */  
  42.     public static void getPrice(StockQuoteServiceStub stub){  
  43.         try{  
  44.             GetPriceDocument reqDoc = GetPriceDocument.Factory.newInstance();  
  45.             GetPriceDocument.GetPrice req = reqDoc.addNewGetPrice();  
  46.             req.setSymbol("ABC");  
  47.   
  48.             GetPriceResponseDocument res =  
  49.                 stub.getPrice(reqDoc);  
  50.   
  51.             System.err.println(res.getGetPriceResponse().getReturn());  
  52.         } catch(Exception e){  
  53.             e.printStackTrace();  
  54.             System.err.println("\n\n\n");  
  55.         }  
  56.     }  
  57. }  

該類使用你創(chuàng)建的XMLBeans數(shù)據(jù)綁定創(chuàng)建一個客戶端存根,然后它在Web服務(wù)上調(diào)用getPrice和update操作。getPrice方法操作創(chuàng)建
GetPriceDocument,它內(nèi)部的GetPrice類,并設(shè)置symbol為ABC。然后它發(fā)送請求并得到GetPriceResponseDocument并顯示當(dāng)前price
update方法創(chuàng)建一個UpdateDocument和Update并設(shè)置symbol為ABC及price為42.32,當(dāng)完成時顯示done。
現(xiàn)在通過在Axis2_HOME/samples/quickstartxmlbeans目錄鍵入ant run.client構(gòu)建并運行工程。
你應(yīng)該得到下列輸出:
代碼
  1. 42  
  2. done  

使用JiBX生成一個客戶端
執(zhí)行以下步驟來使用JiBX構(gòu)建一個客戶端。
通過在Axis2_HOME/samples/quickstartjibx目錄的控制臺鍵入以下命令來生成客戶端存根:

代碼
  1. %AXIS2_HOME%/bin/wsdl2java -uri resources/META-INF/StockQuoteService.wsdl -p samples.quickstart.clients -d jibx -s  
  2. -uw -o build/client  

或者簡單的鍵入"ant generate.client"。
下一步看看quickstartjibx/src/samples/quickstart/clients/JiBXClient.java,在Code Listing 12顯示了。
Code Listing 12:JiBXClient類
代碼
  1. package samples.quickstart.clients;  
  2.   
  3. import samples.quickstart.service.jibx.StockQuoteServiceStub;  
  4.   
  5. public class JiBXClient{  
  6.     public static void main(java.lang.String args[]){  
  7.         try{  
  8.             StockQuoteServiceStub stub =  
  9.                 new StockQuoteServiceStub  
  10.                 ("http://localhost:8080/axis2/services/StockQuoteService");  
  11.   
  12.             getPrice(stub);  
  13.             update(stub);  
  14.   
  15.         } catch(Exception e){  
  16.             e.printStackTrace();  
  17.             System.err.println("\n\n\n");  
  18.         }  
  19.     }  
  20.   
  21.     /* fire and forget */  
  22.     public static void update(StockQuoteServiceStub stub){  
  23.         try{  
  24.             stub.update("ABC"new Double(42.35));  
  25.             System.err.println("done");  
  26.         } catch(Exception e){  
  27.             e.printStackTrace();  
  28.             System.err.println("\n\n\n");  
  29.         }  
  30.     }  
  31.   
  32.     /* two way call/receive */  
  33.     public static void getPrice(StockQuoteServiceStub stub){  
  34.         try{  
  35.             System.err.println(stub.getPrice("ABC"));  
  36.         } catch(Exception e){  
  37.             e.printStackTrace();  
  38.             System.err.println("\n\n\n");  
  39.         }  
  40.     }  
  41.   
  42. }  

該類使用創(chuàng)建的JiBX客戶端存根在Web服務(wù)上訪問getPrice和update操作。getPrice方法為股票"ABC"發(fā)送請求并顯示當(dāng)前price。
update方法為股票"ABC"設(shè)置價格為42.35。
現(xiàn)在通過在Axis2_HOME/samples/quickstartjibx目錄的控制臺鍵入"ant run.client[b]"來構(gòu)建并運行客戶端。
你應(yīng)該得到以下輸出:
代碼
  1. 42  
  2. done  

參考JiBX代碼生成集成來得到更多關(guān)于同Axis2使用JiBX的信息細(xì)節(jié)。

[b]總結(jié)
Axis2是一個立刻讓web服務(wù)運行起來的靈活和健壯的方式。本指南呈現(xiàn)了創(chuàng)建一個可以在Axis2上部署的服務(wù)的五種方法?,F(xiàn)在你擁有
了使用多種不同技術(shù)來創(chuàng)建Web服務(wù)的靈活性。

進一步學(xué)習(xí)
Apache Axis2-http://ws.apache.org/axis2/
Axis2 Architecture-http://ws.apache.org/axis2/1_0/Axis2ArchitectureGuide.html
Introduction to Apache Axis2-http://www.redhat.com/magazine/021jul06/features/apache_axis2/
Working With Apache Axis2-http://www.wso2.net/articles/axis2/java/2006/09/13/working-with-axis2

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1819566

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Axis2開發(fā)WebService客戶端 的3種方式與wsdl2java的用法
轉(zhuǎn):axis2的配置和一個簡單調(diào)用實例
Spring+基于AXIS2 的 werservice
最新分享
Axis2 1.5 客戶端需要的最小jar包集合
使用 gSOAP 通過 HTTP 和 HTTPS 調(diào)用由 WSAD 創(chuàng)建的 J2EE Web 服務(wù)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服