使用Axis2方式釋出webService的三種方式
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方式(無需配置):
示例程式碼如下:
- publicclass HelloService {
- public String sayHello(){
- return"hello";
- }
- public String sayHelloToPerson(String name){
-
if(name==null
- name = "nobody";
- }
- return"hello,"+name;
- }
- }
編譯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
頁面顯示如下結果:
- <ns:sayHelloToPersonResponsexmlns:ns="http://ws.apache.org/axis2">
- <return>hello,bill</return>
- </ns:sayHelloToPersonResponse>
在編寫、釋出和測試WebService時應注意如下幾點:
1. POJO類不能使用package關鍵字宣告包。
2. Axis2在預設情況下可以熱釋出WebService,也就是說,將WebService的.class檔案複製到pojo目錄中時, Tomcat不需要重新啟動就可以自動釋出WebService。 如果想取消Axis2的熱釋出功能,可以開啟<Tomcat安裝目錄>\webapps\axis2\WEB-INF\conf\axis2.xml,
找到如下的配置程式碼:
- <parametername="hotdeployment">true</parameter>
將true改為false即可。要注意的是,Axis2在預設情況下雖然是熱釋出,但並不是熱更新.也就是說,一旦成功釋出了WebService,再想更新該WebService,就必須重啟Tomcat。這對於開發人員除錯WebService非常不方便,因此,在開發WebService時,可以將Axis2設為熱更新。
在axis2.xml檔案中找到
- <parametername="hotupdate">false</parameter>
3. 在瀏覽器中測試WebService時,如果WebService方法有引數,需要使用URL的請求引數來指定該WebService方法,引數的值,請求引數名與方法引數名要一致,例如,要測試sayHelloToPerson方法,請求引數名應為name,如上面的URL所示。
4. 釋出WebService的pojo目錄只是預設的,如果讀者想在其他的目錄釋出WebService,可以開啟axis2.xml檔案,並在<axisconfig>元素中新增如下的子元素:
- <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類,程式碼如下:- package com.sinosoft.webservice;
- publicclass HelloServiceNew {
- public String sayHelloNew(){
- return"hello";
- }
- public String sayHelloToPersonNew(String name){
- if(name==null){
- name = "nobody";
- }
- return"hello,"+name;
- }
- publicvoid updateData(String data){
- System.out.println(data+" 已更新。");
- }
- }
- <?xmlversion="1.0"encoding="UTF-8"?>
- <!-- webService釋出名稱,名稱空間 -->
- <servicename="HelloServiceNew"targetNamespace="http://ws.apache.org/ax2">
- <!-- 更改schemaNamespace,也可使用預設值,客戶端呼叫時會使用 -->
- <schemaschemaNamespace="http://sdjxd.com.cn"/>
- <!-- webService描述 -->
- <description>Web Service例項一</description>
- <!-- webService的實現類 -->
- <parametername="ServiceClass">com.sinosoft.webservice.HelloServiceNew</parameter>
- <messageReceivers>
- <!-- 配置訊息接收器,Axis2會自動選擇 -->
- <messageReceivermep="http://www.w3.org/2004/08/wsdl/in-out"
- class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
- <messageReceivermep="http://www.w3.org/2004/08/wsdl/in-only"
- class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
- </messageReceivers>
- </service>
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
- <servicename=" HelloServiceNew ">
- <description>
- Web Service例子
- </description>
- <parametername="ServiceClass">
- com.sinosoft.webservice.HelloServiceNew
- </parameter>
- <operationname="sayHello">
- <messageReceiverclass="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
- </operation>
- <operationname="updateData">
- <messageReceiver
- class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
- </operation>
- </service>