一、環境安裝(tomcat,本人5.5):
首先下載到官方網站下載axis2 war包。
將war包復制到webapps目錄下邊,啟動tomcat,服務器加載了war包后會生成axis2目錄,跟我們平時的應用目錄沒神馬區別,唯一要注意的是axis的配置文件在WEB-INFconf,
在開發過程中要修改一下這個的配置文件。
二、(改造配置文件):
配置axis2的文件,axis2支持熱部署,意味著你可以再編譯好的class文件,直接復制到pojo目錄下(默認是pojo,等會有說明修改)。
在配置文件中找到<parameter name="hotdeployment">true</parameter>默認已經為熱部署;
另外一個在開發過程中你常需要把熱更新打開,默認是false 不打開,找到hotupdate
<parameter name="hotupdate">true</parameter>
發布pojo的目錄只是默認的,如果需要使用其他的目錄,需要添加配置元素,在axisconfig下面添加
<deployer extension=".class" directory="mymulu" class="org.apache.axis2.deployment.POJODeployer"/>
上面的配置文件只需要修改 directory的屬性,改為目錄名
二、(使用POJO方式發布webservice):
在pojo目錄(此目錄沒有,在axis2WEB-INF下面創建,其實細心的同學會發現,在配置文件axis就已經給我們定義了pojo目錄,看前面添加發布pojo目錄)下面的webservice可以通過重寫url去訪問(后面帶一些參數,類似action),如果遇到數據類型則需要做轉換,原因傳輸過程是以字符串形式傳輸,而且重寫URL的參數名必須要與方法的參數名相同。感覺比較土的方法
好吧說了那么多,現在讓我們來個helloworld吧~!!
首先我們先發布一個webservice,
編寫一個MyTest類
public class MyTest { public String getString(String str){ System.out.println("調用了getString()傳入參數"+str); return str; } public void doNoThing(String str){ System.out.println("調用了doNothing()傳入參數:"+str); } }
1.啟動你的tomcat,訪問這個url:http://127.0.0.1:8080/axis2/ (確保axis2是正常運行了),
2.神馬,沒改配置文件,好吧,就在%tomcat_home%webappsaxis2WEB-INF下面建立一個pojo文件夾。編寫好的類編譯成class文件后,直接復制到你所指定的目錄下。
3.最后訪問你的服務吧http://127.0.0.1:8080/axis2/services/MyTest?wsdl
現在開始客戶端開發,這里省略了使用axis的API開發客戶端,個人覺得這樣的開發效率好低吖,新手上手(本人懶的去看那個API),應該快速掌握怎么使用,所以這里介紹stub方式,使用了axis自帶的命令,可以根據wsdl生成客戶端,在%AXIS2_HOME%in目錄下有一個wsdl2java腳本(注意是wsdl to java)。
前提準備
下載了axis2 bin 文件,配置環境變量 例如:
變量名:AXIS2_HOME
值:E:studywebserviceaxis2-1.5.4-binaxis2-1.5.4
這里要用到前面的發布的webservice,保持你的服務器是啟動的,你的服務正常。
打開CMD
輸入下面的命令
%AXIS2_HOME%/bin/wsdl2java -uri http://localhost:8080/axis2/services/MyTest?wsdl -p com.lj.mywebservice -s -o c:/mywebservice
這里說一下參數, -uri 當然是服務的wsdl文件地址,-p 報名 , -o 表示目錄,這里寫的是絕對路徑,也可以寫相對路徑
回車,你會發現在C盤下多了一個文件目錄,打開里邊一層層進去后,有一個MyTestStub類,這個類實現非常復雜,不用管他,拿過來直接用。
新建一個工程,寫個測試類,把剛才生成的類復制進去,當然別忘記了引入axis的jar包。
package com.lj.myswebservice; import java.rmi.RemoteException; import org.apache.axis2.AxisFault; public class TestClass { public static void main(String[] args) { try { MyTestStub my=new MyTestStub(); //在MYTestStub里邊定義了三個靜態嵌套類,分別作為參數對象,返回值對象。 //這里定義了donothing方法的參數對象 MyTestStub.DoNoThing donothing=new MyTestStub.DoNoThing(); //這里定義了getstring方法的參數對象 MyTestStub.GetString getstring=new MyTestStub.GetString(); ////這里定義了getString方法的返回值對象 MyTestStub.GetStringResponse getstringresponse=new MyTestStub.GetStringResponse(); //設置參數值 donothing.setArgs0("神馬也不做啊"); //設置參數值 getstring.setArgs0("我是帥鍋"); //調用donothing方法 my.doNoThing(donothing); //調用getString發放,設置參數,并返回值 getstringresponse=my.getString(getstring); //打印返回值 System.out.println(getstringresponse.get_return()); } catch (AxisFault e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
運行結果如下。
<!--StartFragment -->

服務器結果如下。
<!--StartFragment -->

總結,使用axis2構建服務是非常快的,這個例子使用的是deploy pojo的方式發布服務,所謂pojo就是個普通的JAVA類,與javabean區別就是不一定有get set方法(是不是這樣理解?)。在客戶端調用服務的時候,采取stub方式(貌似現在很流行,這樣編寫客戶端是灰常直觀的),只要拿到wsdl文件,就可以使用 wsdl2java命令生成客戶端,大大減少了開發量。
還差得遠( ⊙ o ⊙ )啊!··明晚再看看別的方式發布鳥··
晚了睡覺了··明天早起上班( ⊙ o ⊙ )啊!···