手把手教你java axis呼叫異構系統、平臺(.net)的WebService
WebService是一種實現異構系統之間的方法互相呼叫的傳統經典開發技術,常見的各種平臺基本上都支援WebService,包括java,c++,.net,delphi等。但不同的語言和平臺上的資料型別是不一樣的,那又如何實現異構平臺之間的webservice呼叫呢?本文將以java呼叫.net實現的webservice為例加以說明。
java平臺有多種webservice的實現,常見的有cxf(前身為xfire),axis,axis2及java(java9)平臺自帶的SOAPConnectionFactory實現webservice的呼叫。其中,cxf非常容易與spring整合,通常用於解決同種java平臺上的不同業務系統之間的webservice呼叫,而axis通常用於實現異構平臺上不同系統之間的webservcie的呼叫。這裡,將以axis生成Stub呼叫.net實現的WebService.
一、呼叫webService的基本原理
呼叫外部系統的webservice時,外部系統會提供一個WebService的接入地址,如http://xxx.xx.xxx.xx/NewJianGuanWebService/NewOutProvinceService.asmx,
呼叫者則要根據此地址,生成遠端WebService的本地代理,再通過本地代理去呼叫遠端的webservice裡的方法。聽起來有點費解,簡單說,根據webservice的
地址,生成Stub程式,然後呼叫Stub的方法。Stub是什麼?術語可以叫骨架程式。是不是一頭霧水?- -!大家可以直接把Stub理解為根據webservice地址生成
的Client。呼叫stub這個client的方法時,就相當於呼叫了遠端WebService服務的方法。
二、axis實現呼叫.net的webservice
原理大家都知曉了,But how to do?
首先搭建一個java開發環境, jdk 1.8或更高,eclipse版本在eclipse_mars_2以上,過程從略。
接下來新建一個普通的java工程或maven工程,筆者建立的普通工程(偷懶),如下

接下來,在src上右鍵--new--other,選擇webservices下面的Web Service Client,如圖

點選next,如下圖輸入webservice接入地址,選擇client type,點選next

點選finish生成的webservice stub程式碼如下

如果你開啟看這些檔案,仔細的、認真的閱讀生成的呼叫webService的程式碼,一定要認真仔細地看!小樣兒,看不暈你!
其實,這幾個檔案裡,你真正關注的、呼叫的是NewOutProvinceServiceSoapStub,所有的webservice的方法,都在這個檔案裡。
接下來寫個main()方法,裡面寫
NewOutProvinceServiceSoapStub sub = NewOutProvinceServiceSoapStub();
String hello = sub.helloworld();
System.out.println("----->:" + hello);
我保證你的程式碼多半會報錯,報錯資訊大約是:
發生的報錯資訊為:
AxisFault
faultCode: {http://xml.apache.org/axis/}Server.NoEndpoint
faultSubcode:
faultString: No endpoint
正確的方式是這樣的,如圖這樣寫就可以了,執行看結果。

三、總結
真心沒啥總結的了,異構系統的資料型別問題一般都是通過xml等進行資料轉換的,而這些事情axis或其他的工具、實現已經替我們解決了。