<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. Axis2服務??
    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. 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,你可以通過它來執行任何需要的動作,例如添加服務,使用模塊和禁止
    模塊。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.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>??

    這里你看到服務本身被定義了,以及不同的消息交換模式相關的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.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現在是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.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)類似的結構
    這里你為服務的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/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. }??

    該類使用你創建的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/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. }??

    該類使用你創建的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. %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類
    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/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. }??

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

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

    總結
    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 2009-07-14 17:11 禮物 閱讀(415) 評論(0)  編輯  收藏 所屬分類: Axis
    主站蜘蛛池模板: 四虎影视成人永久免费观看视频 | 亚洲欧洲久久久精品| 99久久99久久精品免费观看| 免费国产a理论片| 亚洲人成77777在线播放网站不卡| 亚洲乱码国产一区三区| 免费一级做a爰片久久毛片潮喷| 免费三级毛片电影片| 97国免费在线视频| 免费一级毛片在线播放视频免费观看永久| 免费无码又爽又刺激高潮| 91香蕉国产线在线观看免费| 91精品全国免费观看青青| 欧洲乱码伦视频免费国产| 一本色道久久88—综合亚洲精品| 久久亚洲日韩看片无码| 亚洲国产成人片在线观看无码| 亚洲国产婷婷香蕉久久久久久| 国产精品国产免费无码专区不卡| 成视频年人黄网站免费视频| 91青青青国产在观免费影视| 国产在线精品免费aaa片| 在线观看免费黄色网址| 亚洲精品视频免费| 国产日韩在线视频免费播放| 一级毛片aaaaaa视频免费看| 日本中文字幕免费看| 日韩在线观看免费| 色老头综合免费视频| 七次郎成人免费线路视频| 免费看一级毛片在线观看精品视频| 麻豆亚洲AV成人无码久久精品| 亚洲爆乳无码精品AAA片蜜桃| 亚洲经典千人经典日产| 亚洲av乱码一区二区三区按摩| 亚洲精品无码久久| 国产精品亚洲一区二区三区在线观看 | 亚洲免费一区二区| 一级毛片aa高清免费观看| 亚洲免费一区二区| 日本亚洲欧洲免费天堂午夜看片女人员 |