1. 程式人生 > >java用axis2生成webservice客戶端程式碼及使用方法

java用axis2生成webservice客戶端程式碼及使用方法

這兩天javaweb專案需要呼叫c#釋出的webService介面。自己琢磨了半天,到網上趙各種資料,有java自帶的wsimport方法,還有用axis2的jar包去生成。在實現中也遇到了一些問題,花了點時間解決,現在將它記錄下。

java開發新手,歡迎吐槽。

1. 用jdk自帶的wsimport生成程式碼,命名: wsimport -p com.webservice.client http://.....svc?wsdl

命令引數:

  •  -d 生成客戶端執行類的class檔案的存放目錄
  •  -s 生成客戶端執行類的原始檔的存放目錄
  •  -p 定義生成類的包名
  • 生成程式碼如下:
  • 對應的.class有對應的.java類。但是我找不到webservice對應的service類。我懷疑是jdk的版本問題。
  • 之後我找了很久也沒有解決。望高手指點.....
2. 用org.apache.axis2jar包生成webservice客戶端程式碼 先要配置電腦的axis2環境:
  • a. 下載apache的apache壓縮包,我下載的是axis2-1.6.2-bin.zip檔案
  • b. 解壓到目錄webservice,如下:
  • c 配置環境變數AXIS2_HOME(到bin目錄)
  • 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檔案了。