Axis2.x WebService開發
最近因爲公司項目的需要,需要做接口讓其它公司開發的系統來調用我們的接口獲取數據,所以要開發接口,但是以前有人開發過接口通過Axis2.x 開發過接口,所以我必須也要用這種方式來開發接口,這樣才能把接口發佈在一起。
webservice開發有很多種方式,我這只是其中的一種開發方式,我環境搭建起來就花了好久的時間,在這裏我會寫出來,希望你們在我之後不會遇到這麼多問題。
一、 準備工作
1、開發準備
首先需要下載axis2的相關jar包,到axis的官方網站即可獲得開發的依賴包。
下載地址:http://axis.apache.org/axis2/java/core/download.cgi
現在最高的版本是1.5.4的
然後你需要下載官方提供的axis的eclipse插件工具,可以幫助我們打包(aar)及其生產客戶端調用代碼。
下載頁面:http://axis.apache.org/axis2/java/core/tools/index.html
Service Archive Wizard - Eclipse Plug-in
Code Generator Wizard - Eclipse Plug-in
2、安裝eclipse插件
我是用meclipse 8.5和eclipse插件org.apache.axis2.eclipse.service.plugin_1.6.2.jar,org.apache.axis2.eclipse.codegen.plugin_1.6.2.jar
這兩個jar包直接放在myeclipse的安裝目錄MyEclipse8.5\dropins裏面,並且要加上javax.xml.bind_2.1.9.v201005080401.jar,
javax.xml.stream_1.0.1.v201004272200.jar,javax.xml_1.3.4.v201005080400.jar這幾個文件可以自己去MyEclipse8.5\Common\plugins報裏面去找
把這五個jar包一起放在myeclipse安裝目錄MyEclipse8.5\dropins裏面,插件就可以使用了。
以前用1.5.2,1.3版本的插件要麼顯示不出來,要麼到以後操作的時候就報錯。
如果你的eclipse插件安裝成功後,會看到如下效果:
3、分析axis2-bin文件目錄結構
下載下來的axis2的依賴庫,其中有一個axis2-1.5.3-bin.zip的庫文件,目錄結構如下:
bin文件夾是axis2的常用工具,其中有將wsdl文件轉換成客戶端調用的wsdl2java工具及將java轉換成wsdl文件的工具
(這個文件很重要的,在以後插件生成客戶端代碼出錯的情況下,可以用這裏面得命令去生成,不會報錯)
conf是axis2的配置文件
lib運行所要的依賴庫
repository是發佈過的axis服務和文件
sample是示例
webapp是web文件和jsp頁面等
4、我們需要將下載下來的axis2-1.5.3-war.zip中的axis2.war這個文件放在我們的tomcat目錄下,啓動tomcat就會把war文件轉成一個可以跑起來的axis2的項目。
Tomcat啓動後,在瀏覽器中輸入:http://localhost:8080/axis2/你可以看到
下面用axis2的工具生成aar文件,然後完成發佈WebService。
1、 點擊工作空間WorkSpace,右鍵New選擇Other
2、 然後點擊Browser選擇你當前的工程的classes目錄
點擊Next
3、 沒有WSDL,選擇第一項,點擊Next,然後再Next一次
4. 不用設置service.xml,直接Next
5.最關鍵一步,填寫WebService的Name,設置class路徑點擊Load你就可以看到當前class的方法
6、 設置aar文件的名稱和保持的目錄
點擊Finish你可以看到提示successfully的提示。
7、刷新當前工程可以看到ManangerUserService.aar文件了
8.下面我們在瀏覽器中訪問這個地址:http://localhost:8080/axis2/
點擊Admin這個鏈接,可以看到要輸入用戶名和密碼,用戶名和密碼在
Tomcat_Home\webapps\axis2\WEB-INF\conf下的axis2.xml中可以找到
<parameter name="userName">admin</parameter>
<parameter name="password">axis2</parameter>
9、 輸入密碼進入管理頁面後可以看到
下面介紹下上面常用的功能
Upload Service當然是上傳aar的文件,完成發佈WebService的工具了
Available Service是查看當前發佈的Service詳細信息
Available Service Groups是Service組
Global Chains是可以用的全局的Chain
Operation Specific Chains是某個具體操作的chain
Deactivate Service 是取消某個Service
Activate Service 是將取消發佈的Service再發布出去
Edit Parameters是修改WebService類的參數
10、 我們這裏用Upload Service這個工具,然後選擇我們剛纔用axis2的工具生成aar文件。
其實這一步我們可以直接將ManagerUserService.aar文件copy到
tomcat-home\webapps\axis2\WEB-INF\services這個目錄下。
11、 然後點擊Available Service就可以看到ManagerUserService這個Service了
現在我們要用axis2的工具生成wsdl文件
1、點擊WorkSpace,右鍵New選擇Other。然後選擇客戶端代碼生成工具
2、點擊Next,你可以看到讓你選擇wsdl。選擇第一個,然後點擊Next
上面是根據Java class代碼生成wsdl文件
3、填寫你的WebService的classpath,然後選擇你當前class所在工程的class目錄
然後點擊Add Folder選擇你的工程的classes 或 bin目錄,也就是你填寫的class所在的目錄,然後點擊Test 測試是否正確。
點擊Next繼續下一步
4、可以看到即將發佈的WebService名稱和命名空間
5、繼續Next,選擇wsdl文件保存目錄
這樣services.wsdl文件就生成了
控制檯wsdl生成客戶端代碼
用axis2的插件生成的客戶端代碼總是報錯,可能是版本跟axis2不一致,所以我直接用wsdl2java.bat生成客戶端調用
代碼
控制檯用wsdl轉JAVA方法:
Axis2提供了一個wsdl2java.bat命令可以根據WSDL文件自動產生調用WebService的代碼。
wsdl2java.bat命令可以在<Axis2安裝目錄>"bin目錄中找到
在Windows控制檯輸出如下的命令行來生成調用WebService的代碼:
你的axis2的目錄\bin\wsdl2java -uri http://localhost:8080/axis2/services/SimpleService?wsdl -p client
黑窗口控制檯:
C:\Users\admin>D/
D:\>cd D:\axis2-1.6.1\bin
D:\axis2-1.6.1\bin>wsdl2java -uri (寫上要訪問的webservices地址)/回車
-s -o stub
在執行完上面的命令後,讀者就會發現在當前目錄下多了個stub目錄,在."stub"src"client目錄可以找到一個SimpleServiceStub.java文件。
參數說明:
-url 指定了wsdl文件的路徑,可以是本地路徑,也可以是網絡路徑。
-p 指定了生成的Java類的包名,
-o 指定了生成的一系列文件保存的根目錄。
-ss 生成服務器端代碼(如skeletons)
-sd 生成服務器描述文件(services.xml),要在 有-ss參數的時候纔有效
-scn 用已有的代碼代替skeletons
調用代碼
public class RealFrDataService {
public static void main(String[] args) {
String target = "http://localhost:8080/axis2/services/RealFrDataService";
try{
RealFrDataServiceStub stub = new RealFrDataServiceStub(target);
RealFrDataServiceStub.GetStatisticsDataByWgCode object = new RealFrDataServiceStub.GetStatisticsDataByWgCode();
object.setCode("110108012023");
RealFrDataServiceStub.GetStatisticsDataByWgCodeResponse response = stub.getStatisticsDataByWgCode(object);
System.out.println(response.get_return());
}
catch(Exception ex){
ex.printStackTrace();
}
}
}