<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

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

    內容

    Java代碼 復制代碼
    1. 介紹   
    2. 做好準備   
    3. <SPAN class=hilite1>Axis2</SPAN>服務   
    4. 創建服務   
    5.     部署POJOs   
    6.     使用AXIOM構建服務   
    7.     使用ADB生成服務   
    8.     使用XMLBeans生成服務   
    9.     使用JiBX生成服務   
    10. 生成客戶端   
    11.     使用AXIOM創建一個客戶端   
    12.     使用ADB生成一個客戶端   
    13.     使用XMLBeans生成一個客戶端   
    14.     使用JiBX生成一個客戶端   
    15. 總結   
    16. 進一步學習  



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

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

    Java代碼 復制代碼
    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. }  


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

    做好準備
    在我們使用Axis2構建任何東西之前,我們將需要關注一些家務事。現在你將需要準備好你使用Axis2的環境,幸運的是,它只包括一
    些簡單的步驟:
    1,下載并安裝Java(版本至少為JDK1.4)
    2,下載Axis2并解壓到一個目標目錄
    3,復制axis2.war文件到你的servlet引擎的webapps目錄
    4,設置AXIS2_HOME環境變量來指出目標目錄,注意Axis2生成的所有腳本和構建文件依賴于這個值,所以不要遺漏了這個步驟。
    大多數情況下,我們的服務也將需要一個WSDL文件,Axis2的Java2WSDL可以用來生成一個WSDL。執行以下步驟來從一個Java類生成一
    個WSDL文件:
    1,創建并編譯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文件夾,我們將在本指南的其他部分使用它,代替生成過
    程創建的一般參數。

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

    Java代碼 復制代碼
    1. <SPAN class=hilite1>axis2</SPAN>-web    
    2. META-INF   
    3. WEB-INF   
    4.     classes    
    5.     conf   
    6.         <SPAN class=hilite1>axis2</SPAN>.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,你可以通過它來執行任何需要的動作,例如添加服務,使用模塊和禁止
    模塊。WEB-INF包含了運行部署到服務目錄的任何服務的實際上的java類和其他支持文件。
    這里主要的文件是axis2.xml,它控制程序怎樣與接收的消息打交道,決定Axis2是否需要使用模塊目錄里定義的任何模塊。
    這里你可以看到,服務可以被部署為*.aar文件,但是它們的內容必須以一個特殊的方式安排。例如,服務的結構將為如下:

    Java代碼 復制代碼
    1. - StockQuoteService   
    2.    - META-INF   
    3.      - services.xml   
    4.    - samples   
    5.      - quickstart   
    6.        - service   
    7.          - pojo   
    8.            - StockQuoteService.class  


    這不是太復雜,服務的名字為StockQuoteService,它在services.xml中指定,并且根據包名把任何Java類放到合適的位置。META-INF
    目錄包含關于Axis2需要來正確執行服務的額外信息。services.xml文件定義了服務本身并把Java類鏈接到它(參看Code Listing 3)。
    Code Listing 3: 服務定義文件

    Java代碼 復制代碼
    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.<SPAN class=hilite1>axis2</SPAN>.rpc.receivers.RPCInOnlyMessageReceiver"/>   
    9.         <messageReceiver   
    10.             mep="http://www.w3.org/2004/08/wsdl/in-out"  
    11.     class="org.apache.<SPAN class=hilite1>axis2</SPAN>.rpc.receivers.RPCMessageReceiver"/>   
    12.     </messageReceivers>   
    13.     <parameter name="ServiceClass">   
    14.         samples.quickstart.service.pojo.StockQuoteService   
    15.     </parameter>   
    16. </service>  


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

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

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

    Java代碼 復制代碼
    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。
    盡管如此,創建StockQuoteService.wsdl是可選的。它可以是直接從Java類生成的版本,或者該文件的一個自定義版本,并且servi
    ces.xml是本文檔前面提到的同一文件。
    現在通過在quickstart目錄鍵入ant generate.service來構建工程,該目錄創建了以下目錄結構:

    Java代碼 復制代碼
    1. - quickstart/build/classes   
    2.    - META-INF   
    3.      - services.xml   
    4.    - samples   
    5.      - quickstart   
    6.        - service   
    7.          - pojo   
    8.            - StockQuoteService.class  


    如果你想以爆發形式部署服務,重命名classes目錄為StockQuoteService,并復制它到你的servlet引擎的webapps/axis2/WEB-INF/s
    ervices目錄。否則,復制build/StockQuoteService.aar文件到你的servlet引擎的webapps/axis2/WEB-INF/services目錄。然后通過
    視察以下服務列表來確認服務被正確部署:
    http://localhost:8080/axis2/services/listServices
    你也可以檢驗以下WSDL:
    http://localhost:8080/axis2/services/StockQuoteService?wsdl
    以及以下結構:
    http://localhost:8080/axis2/services/StockQuoteService?xsd
    一旦這些urls工作,讓我們快速測試一下服務。讓你的瀏覽器訪問以下URL試試:
    http://localhost:8080/axis2/rest/StockQuoteService/getPrice?symbol=IBM
    你將得到如下應答:

    Java代碼 復制代碼
    1. <ns:getPriceResponse xmlns:ns="http://pojo.service.quickstart.samples/xsd"><ns:return>42</ns:return></ns:getPriceResponse>  


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

    使用AXIOM構建服務
    為了使用AXIOM"從零開始"構建一個服務,執行以下步驟。
    注意包含在/samples/quickstartaxiom的目錄結構:

    Java代碼 復制代碼
    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: 服務定義文件

    Java代碼 復制代碼
    1. <service name="StockQuoteService" scope="application">   
    2.     <description>   
    3.         Stock Quote Service   
    4.     </description>   
    5.     <operation name="getPrice">   
    6.         <messageReceiver class="org.apache.<SPAN class=hilite1>axis2</SPAN>.receivers.RawXMLINOutMessageReceiver"/>   
    7.     </operation>   
    8.     <operation name="update">   
    9.         <messageReceiver class="org.apache.<SPAN class=hilite1>axis2</SPAN>.receivers.RawXMLINOnlyMessageReceiver"/>   
    10.     </operation>   
    11.     <parameter name="ServiceClass">samples.quickstart.service.axiom.StockQuoteService</parameter>   
    12. </service>  


    注意,幾乎是一樣的,除了操作是顯示地定義在service.xml文件中,而且MessageReceiver現在是RawXML。
    現在,上面提到的簡單的使用Axis2庫的類的StockQuoteService.java類,在Code Listing 5中定義。
    Code Listing 5:使用AXIOM的StockQuoteService類

    Java代碼 復制代碼
    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)類似的結構
    作為服務的方法必須使用OMElement作為它們的參數,OMElement表示一個XML元素,在這里它則為進來的SOAP消息的有效載荷。這里,
    你提取有效載荷元素的第一個孩子,添加文本給它,并使用它作為返回的OMElement的內容。除非這是一個"只有in"的服務,這些方法
    必須返回一個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
    以及以下結構:
    http://localhost:8080/axis2/services/StockQuoteService?xsd

    使用ADB生成服務
    執行以下步驟來使用Axis2 Databinding Framework(ADB)生成和部署服務。
    通過在Axis2_HOME/samples/quickstartadb目錄鍵入以下內容來使用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轉換指定同步或者只模塊化調用。-ss轉換創建服務器端代碼(骨架和相關文件)。-sd
    轉換創建一個服務描述符(services.xml文件)。-ssi轉換為服務骨架創建一個接口。服務文件現在應該定位于build/service。
    如果你通過使用WSDL2Java直接生成代碼,下一步你需要修改生成的骨架來實現服務(如果你使用"ant generate.service",一個完全
    的骨架會自動復制并覆蓋生成的那個)。
    打開build/service/src/samples/quickstart/adb/service/StockQuoteServiceSkeleton.java文件并修改它來添加你的服務的功能性
    到生成的方法,下面的Code Listing 6顯示了。
    Code Listing 6:定義服務骨架文件

    Java代碼 復制代碼
    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. }  


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

    使用XMLBeans生成服務
    執行以下步驟來使用XMLBeans生成服務。
    通過在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數據綁定。-s轉換指定同步或者只是模塊化調用。-ss轉換創建服務器端代碼(骨架和相關文件)。-sd
    轉換創建一個服務描述符(services.xml文件)。-ssi轉換創建一個服務骨架的接口。現在服務文件應該位于build/service。
    如果你通過使用WSDL2Java直接生成代碼,下一步你需要修改生成的骨架來實現服務(如果你使用"ant generate.service",一個完全
    的骨架將被自動復制并覆蓋生成的那個)。
    下一步打開build/service/src/samples/quickstart/service/xmlbeans/StockQuoteServiceSkeleton.java文件并修改它來添加你的
    服務的功能性到生成的方法(參看Code Listing 7)。
    Code Listing 7:定義服務骨架

    Java代碼 復制代碼
    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構建項目,該目錄包含build.xml文件。
    如果一切進展順利,你應該在你的窗口看到BUILD SUCCESSFUL消息,而且StockQuoteService.aar文件位于新創建的build/service/
    build/lib目錄。復制該文件到servlet引擎的webapps/axis2/WEB-INF/services目錄。
    你可以通過視察下面的服務列表來確認服務正確部署:
    http://localhost:8080/axis2/services/listServices
    你也可以檢驗以下WSDL:
    http://localhost:8080/axis2/services/StockQuoteService?wsdl
    以及以下結構:
    http://localhost:8080/axis2/services/StockQuoteService?xsd

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

    Java代碼 復制代碼
    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. }  


    現在你可以通過在build/service目錄鍵入命令ant jar.server構建工程
    如果一切進展順利,你應該在你的窗口看到BUILD SUCCESSFUL消息,并且StockQuoteService.aar文件位于build/service/build/lib
    目錄。復制該文件到servlet引擎的webapps/axis2/WEB-INF/services目錄。
    你可以通過視察下面的服務列表來確認服務正確部署:
    http://localhost:8080/axis2/services/listServices
    你也可以檢驗以下WSDL:
    http://localhost:8080/axis2/services/StockQuoteService?wsdl
    以及以下結構:
    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的更新信息。

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

    使用AXIOM創建一個客戶端
    執行以下步驟來使用AXIOM構建一個客戶端。
    也注意在使用AXIOM創建服務部分顯示的目錄結構,為了完整性下面的重復了。

    Java代碼 復制代碼
    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類

    Java代碼 復制代碼
    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.<SPAN class=hilite1>axis2</SPAN>.Constants;   
    8. import org.apache.<SPAN class=hilite1>axis2</SPAN>.addressing.EndpointReference;   
    9. import org.apache.<SPAN class=hilite1>axis2</SPAN>.client.Options;   
    10. import org.apache.<SPAN class=hilite1>axis2</SPAN>.client.ServiceClient;   
    11.   
    12. public class AXIOMClient {   
    13.   
    14.     private static EndpointReference targetEPR =    
    15.         new EndpointReference("http://localhost:8080/<SPAN class=hilite1>axis2</SPAN>/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)類似的結構
    這里你為服務的update和getPrice方法建立有效載荷。有效載荷的創建類似于你為AXIOM服務創建getPriceResponse有效載荷。然后
    你創建Options類,并創建用來與服務交流的ServiceClient。首先你調用update方法,一個什么也不返回的fireAndForget方法。最后
    你調用getPrice方法,并從服務得到當前價格并顯示它。
    現在你可以通過在Axis2_HOME/samples/quickstartaxiom目錄鍵入ant run.client構建并運行AXIOM客戶端。
    你應該得到以下輸出:

    Java代碼 復制代碼
    1. done   
    2. Current price of WSO: 123.42  



    使用ADB生成一個客戶端
    執行以下步驟來使用Axis Data Binding(ADB)構建一個客戶端。
    通過在Axis2_HOME/samples/quickstartadb目錄鍵入以下命令來生成客戶端數據綁定:
    %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類

    Java代碼 復制代碼
    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/<SPAN class=hilite1>axis2</SPAN>/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. }  


    該類使用你創建的Axis Data Bindings創建一個客戶端存根。然后它在Web服務上調用getPrice和update操作。getPrice方法操作創建
    GetPrice有效載荷并設置symbol為ABC。然后它發送請求并顯示當前價格。update方法創建一個Update有效載荷,設置symbol為ABC及
    price為42.35。
    現在通過在Axis2_HOME/samples/quickstartadb目錄鍵入ant run.client來構建并運行客戶端。
    你應該得到以下輸出:

    Java代碼 復制代碼
    1. 42  
    2. done  



    使用XMLBeans生成一個客戶端
    執行以下步驟來使用XMLBeans數據綁定來構建一個客戶端。
    通過在xmlbeansClient目錄鍵入以下命令來生成數據綁定:
    %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
    注意這只會創建客戶端存根代碼而不會創建服務器端代碼。
    下一步看看quickstartxmlbeans/src/samples/quickstart/clients/XMLBEANSClient.java,并在Code Listing 11看看它怎樣定義的
    Code Listing 11:XMLBEANSClient類

    Java代碼 復制代碼
    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/<SPAN class=hilite1>axis2</SPAN>/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. }  


    該類使用你創建的XMLBeans數據綁定創建一個客戶端存根,然后它在Web服務上調用getPrice和update操作。getPrice方法操作創建
    GetPriceDocument,它內部的GetPrice類,并設置symbol為ABC。然后它發送請求并得到GetPriceResponseDocument并顯示當前price
    update方法創建一個UpdateDocument和Update并設置symbol為ABC及price為42.32,當完成時顯示done。
    現在通過在Axis2_HOME/samples/quickstartxmlbeans目錄鍵入ant run.client構建并運行工程。
    你應該得到下列輸出:

    Java代碼 復制代碼
    1. 42  
    2. done  



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

    Java代碼 復制代碼
    1. %<SPAN class=hilite1>AXIS2</SPAN>_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類

    Java代碼 復制代碼
    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/<SPAN class=hilite1>axis2</SPAN>/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. }  


    該類使用創建的JiBX客戶端存根在Web服務上訪問getPrice和update操作。getPrice方法為股票"ABC"發送請求并顯示當前price。
    update方法為股票"ABC"設置價格為42.35。
    現在通過在Axis2_HOME/samples/quickstartjibx目錄的控制臺鍵入"ant run.client[b]"來構建并運行客戶端。
    你應該得到以下輸出:

    Java代碼 復制代碼
    1. 42  
    2. done  


    參考JiBX代碼生成集成來得到更多關于同Axis2使用JiBX的信息細節。

    [b]總結

    Axis2是一個立刻讓web服務運行起來的靈活和健壯的方式。本指南呈現了創建一個可以在Axis2上部署的服務的五種方法。現在你擁有
    了使用多種不同技術來創建Web服務的靈活性。

    進一步學習
    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

    posted on 2008-07-10 17:22 禮物 閱讀(1140) 評論(0)  編輯  收藏 所屬分類: web serviceAxis
    主站蜘蛛池模板: 亚洲成av人片天堂网| 一级做a爰片久久毛片免费看| 国产亚洲人成A在线V网站| 三年片在线观看免费观看高清电影| 中国一级毛片视频免费看| 亚洲日本成本人观看| 亚洲综合区图片小说区| 亚洲综合在线另类色区奇米| 国产成人无码a区在线观看视频免费 | 亚洲狠狠ady亚洲精品大秀| 久久亚洲高清综合| 四虎影视永久免费观看网址 | 亚洲不卡中文字幕| 亚洲av不卡一区二区三区| 狠狠综合久久综合88亚洲| 国产a级特黄的片子视频免费| 四虎影院在线免费播放| 妻子5免费完整高清电视| 毛片免费全部播放无码| 亚洲国产精品免费视频| 免费看少妇高潮成人片| 国产一级a毛一级a看免费人娇| 免费看又黄又爽又猛的视频软件| 亚洲精品国产第一综合99久久| 日韩亚洲人成在线| 国产AV旡码专区亚洲AV苍井空| 亚洲宅男天堂a在线| 亚洲精品国产福利片| 亚洲综合激情六月婷婷在线观看| 亚洲国产人成网站在线电影动漫| 亚洲大尺度无码专区尤物| 久久久无码精品亚洲日韩蜜桃| 亚洲成a人片77777kkkk| 亚洲av日韩av天堂影片精品| 亚洲va在线va天堂va不卡下载| 亚洲午夜未满十八勿入| 亚洲黄色在线观看网站| 亚洲一卡二卡三卡四卡无卡麻豆 | 日本免费xxxx色视频| 成人午夜免费福利视频| 无限动漫网在线观看免费 |