這兩天javaweb項目需要調用c#釋出的webService接口。自己琢磨了半天,到網上趙各種資料,有java自帶的wsimport方法,還有用axis2的jar包去生成。在實作中也遇到了一些問題,花了點時間解決,現在将它記錄下。
java開發新手,歡迎吐槽。
1. 用jdk自帶的wsimport生成代碼,命名: wsimport -p com.webservice.client http://.....svc?wsdl
指令參數:
- -d 生成用戶端執行類的class檔案的存放目錄
- -s 生成用戶端執行類的源檔案的存放目錄
- -p 定義生成類的包名
- 生成代碼如下:
-
java用axis2生成webservice用戶端代碼及使用方法 java用axis2生成webservice用戶端代碼及使用方法 - 對應的.class有對應的.java類。但是我找不到webservice對應的service類。我懷疑是jdk的版本問題。
- 之後我找了很久也沒有解決。望高手指點.....
2. 用org.apache.axis2jar包生成webservice用戶端代碼
先要配置電腦的axis2環境:
- a. 下載下傳apache的apache壓縮包,我下載下傳的是axis2-1.6.2-bin.zip檔案
- b. 解壓到目錄webservice,如下:
-
java用axis2生成webservice用戶端代碼及使用方法 - c 配置環境變量AXIS2_HOME(到bin目錄)
-
java用axis2生成webservice用戶端代碼及使用方法 - d. 打開cmd指令行cd到axis2的bin目錄;
- 運作指令:WSDL2Java -p com.webservice.client -uri http://.......svc?wsdl
- 指令參數 -p package; -S 為生成的源碼指定存儲路徑; -o <path> 指定生成代碼的輸出路徑
- 生成一個webservice名稱加上Stub.java的java類
- 至此,java用戶端代碼生成介紹。
- 使用生成的java類
- a. 将java檔案拷貝到項目中
- b. 添加jar包支援。要添加的jar包很多,我這裡怕少了jar包,是以把axis2目錄中的lib中的所有jar包都添加到項目中去。
- c. 添加addressing-1.5.5.jar.(這個不能少)
- d. 編寫main測試類
-
上面代碼中的紅色标記不能少,上了會報異常import com.webservice.hb2012.client.MobileOAWcfServiceStub; import com.webservice.hb2012.client.MobileOAWcfServiceStub.GetNewsDetail; import com.webservice.hb2012.client.MobileOAWcfServiceStub.GetNewsDetailResponse; public class Mytest { public static void main(String[] args) throws Exception { MobileOAWcfServiceStub service = new MobileOAWcfServiceStub(); //注意,這裡這句代碼一定不能少<span style="color:#ff6666;"> service._getServiceClient().engageModule("addressing");</span> GetNewsDetail getNewsDetail = new GetNewsDetail(); getNewsDetail.setNewsGuid("e87d2aa3-d1c8-4362-aaaa-ffd233060533"); GetNewsDetailResponse response = service.getNewsDetail(getNewsDetail); String result = response.getGetNewsDetailResult(); System.out.println(result); } }
-
Exception in thread "main" org.apache.axis2.AxisFault: Must Understand check failed for header http://www.w3.org/2005/08/addressing : Action at org.apache.axis2.engine.AxisEngine.checkMustUnderstand(AxisEngine.java:105) at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:171) at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:364) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:421) at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229) at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165) at com.webservice.hb2012.client.MobileOAWcfServiceStub.getNewsDetail(MobileOAWcfServiceStub.java:1689) at com.test.Mytest.main(Mytest.java:13)
- OK,通過這樣就可以直接使用Stub.java檔案了。