1. 程式人生 > >使用Axis2方式釋出webService的三種方式

使用Axis2方式釋出webService的三種方式

首先可以下載如下兩個zip包:
axis2-1.6.1-bin.zip
axis2-1.6.1-war.zip
其中 axis2-1.6.1-bin.zip檔案中包含了Axis2中所有的jar檔案, 
axis2-1.6.1-war.zip檔案用於將WebService釋出到Web容器中。
將axis2-1.6.1-war.zip檔案解壓到相應的目錄,將目錄中的axis2.war檔案放到<Tomcat安裝目錄>\webapps目錄中,

並啟動Tomcat,在瀏覽器位址列中輸入如下的URL:

 http://localhost:8080/axis2/

如看到axis2的主頁面則安裝成功。

2、簡單的pojo方式(無需配置):

在Axis2中不需要進行任何的配置,就可以直接將一個簡單的POJO釋出成WebService。其中POJO中所有的public方法將被髮布成WebService方法。
示例程式碼如下:
  1. publicclass HelloService {     
  2.     public String sayHello(){    
  3.         return"hello";    
  4.     }       
  5.     public String sayHelloToPerson(String name){            
  6.         if(name==null
    ){    
  7.             name = "nobody";    
  8.         }    
  9.         return"hello,"+name;    
  10.     }    
  11. }   

編譯HelloService類後,將HelloService.class檔案放到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\pojo目錄中(如果沒有pojo目錄,則建立該目錄)。現在我們已經成功將HelloService類釋出成了WebService。
在瀏覽器位址列中輸入如下的URL:

http://localhost:8080/axis2/services/listServices


在瀏覽器位址列中輸入如下的兩個URL來分別測試sayHelloToPerson和sayHello方法:
1.http://localhost:8080/axis2/services/HelloService/sayHello 
2.http://localhost:8080/axis2/services/HelloService/sayHelloToPerson?name=bill

頁面顯示如下結果:

  1. <ns:sayHelloToPersonResponsexmlns:ns="http://ws.apache.org/axis2">
  2.     <return>hello,bill</return>
  3. </ns:sayHelloToPersonResponse>

在編寫、釋出和測試WebService時應注意如下幾點:
     1. POJO類不能使用package關鍵字宣告包。

     2. Axis2在預設情況下可以熱釋出WebService,也就是說,將WebService的.class檔案複製到pojo目錄中時,  Tomcat不需要重新啟動就可以自動釋出WebService。  如果想取消Axis2的熱釋出功能,可以開啟<Tomcat安裝目錄>\webapps\axis2\WEB-INF\conf\axis2.xml,

找到如下的配置程式碼:

  1. <parametername="hotdeployment">true</parameter>

將true改為false即可。要注意的是,Axis2在預設情況下雖然是熱釋出,但並不是熱更新.也就是說,一旦成功釋出了WebService,再想更新該WebService,就必須重啟Tomcat。這對於開發人員除錯WebService非常不方便,因此,在開發WebService時,可以將Axis2設為熱更新。
 在axis2.xml檔案中找到
  1. <parametername="hotupdate">false</parameter>
 將false改為true即可。
3. 在瀏覽器中測試WebService時,如果WebService方法有引數,需要使用URL的請求引數來指定該WebService方法,引數的值,請求引數名與方法引數名要一致,例如,要測試sayHelloToPerson方法,請求引數名應為name,如上面的URL所示。
4. 釋出WebService的pojo目錄只是預設的,如果讀者想在其他的目錄釋出WebService,可以開啟axis2.xml檔案,並在<axisconfig>元素中新增如下的子元素:
  1. <deployerextension=".class"directory="my"class="org.apache.axis2.deployment.POJODeployer"/>

上面的配置允許在<Tomcat安裝目錄>\webapps\axis2\WEB-INF\my目錄中釋出WebService。   例如,將本例中的HelloService.class複製到my目錄中也可以成功釋出(但要刪除pojo目錄中的SimpleService.class,否則WebService會重名)。

3、打jar包的方式:

用Axis2實現Web Service,雖然可以將POJO類放在axis2\WEB-INF\pojo目錄中直接釋出成Web Service,  這樣做不需要進行任何配置,但這些POJO類不能在任何包中。這似乎有些不方便.  為此,Axis2也允許將帶包的POJO類釋出成Web Service。先實現一個POJO類,程式碼如下:
  1. package com.sinosoft.webservice;    
  2. publicclass HelloServiceNew {              
  3.     public String sayHelloNew(){    
  4.         return"hello";    
  5.     }               
  6.     public String sayHelloToPersonNew(String name){         
  7.         if(name==null){    
  8.             name = "nobody";    
  9.         }               
  10.         return"hello,"+name;    
  11.     }    
  12.     publicvoid updateData(String data){    
  13.         System.out.println(data+" 已更新。");    
  14.     }    
  15. }    
要想將HelloServiceNew類釋出成Web Service,需要一個services.xml檔案, 這個檔案需要放在META-INF目錄中,該檔案的內容如下:
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!-- webService釋出名稱,名稱空間 -->
  3. <servicename="HelloServiceNew"targetNamespace="http://ws.apache.org/ax2">
  4. <!-- 更改schemaNamespace,也可使用預設值,客戶端呼叫時會使用 -->
  5. <schemaschemaNamespace="http://sdjxd.com.cn"/>
  6. <!-- webService描述 -->
  7. <description>Web Service例項一</description>
  8. <!-- webService的實現類 -->
  9. <parametername="ServiceClass">com.sinosoft.webservice.HelloServiceNew</parameter>
  10. <messageReceivers>
  11. <!-- 配置訊息接收器,Axis2會自動選擇 -->
  12. <messageReceivermep="http://www.w3.org/2004/08/wsdl/in-out"
  13.     class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
  14. <messageReceivermep="http://www.w3.org/2004/08/wsdl/in-only"
  15.     class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
  16. </messageReceivers>
  17. </service>
其中<service>元素用於釋出Web Service,一個<service>元素只能釋出一個WebService類,name屬性表示WebService名,如下面的URL可以獲得這個WebService的WSDL內容:

  http://localhost:8080/axis2/services/HelloServiceNew?wsdl 

其中name屬性名就是上面URL中"?"和"/"之間的部分。<description>元素表示當前Web Service的描述,<parameter>元素用於設定WebService的引數, 在這裡用於設定WebService對應的類名。在這裡最值得注意的是<messageReceivers>元素,該元素用於設定處理WebService方法的處理器。例如,sayHelloNew方法有一個返回值,因此,需要使用可處理輸入輸出的RPCMessageReceiver類,

而updateData方法沒有返回值,因此,需要使用只能處理輸入的RPCInOnlyMessageReceiver類。使用這種方式釋出WebService,必須打包成.aar檔案,.aar檔案實際上就是改變了副檔名的.jar檔案。現在建立了兩個檔案:HelloServiceNew.java和services.xml。將HelloServiceNew.java編譯,生成HelloServiceNew.class。
services.xml和HelloServiceNew.class檔案的位置如下:

D:\ws\ com\sinosoft\webservice\HelloServiceNew.class
D:\ws\META-INF\services.xml


在windows控制檯中進入ws目錄,並輸入如下的命令生成.aar檔案.
 
jar cvf ws.aar .(注意:最後面是空格+小數點)


實際上,.jar檔案也可以釋出webservice,但axis2官方文件中建議使用.aar檔案釋出webservice.最後將ws.aar檔案複製到<Tomcat安裝目錄>\webapps\axis2\WEB-INF\services目錄中,啟動Tomcat後,就可以呼叫這個WebService了。另外services.xml檔案中也可以直接指定WebService類的方法,如可以用下面的配置程式碼來發布WebService

  1. <servicename=" HelloServiceNew ">
  2. <description>
  3.     Web Service例子    
  4. </description>
  5. <parametername="ServiceClass">
  6.     com.sinosoft.webservice.HelloServiceNew      
  7. </parameter>
  8. <operationname="sayHello">
  9.     <messageReceiverclass="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
  10. </operation>
  11. <operationname="updateData">
  12.     <messageReceiver
  13.         class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
  14.     </operation>
  15. </service>
      上面