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

服務(wù)器結(jié)果如下。
<!--StartFragment -->

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