axis2呼叫 .net的webservice asmx
阿新 • • 發佈:2019-01-06
源自: http://cqyqing.iteye.com/blog/1668227
1、下載axis2(到apache官網下載www.apache.org)
2、我下載的是axis2-1.5-bin.zip,解壓到當前資料夾
3、進入bin目錄(F:\study\java\service\axis2\axis2-1.5\bin)
4、開啟cmd,進入第3步的bin目錄,輸入wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl,回車
可能會提示錯誤,設定一下JAVA_HOME 和 AXIS2_HOME 就好(在WIN的環境變數下面,記得log-off或者重起)
5、之後會在bin目錄下生成一個src目錄,將src目錄下的兩個類考到eclipse開發目錄下
6、建一個測試類Test,程式碼如下
import cn.com.webxml.WeatherWebServiceStub; import cn.com.webxml.WeatherWebServiceStub.ArrayOfString; import cn.com.webxml.WeatherWebServiceStub.GetWeatherbyCityName; public class Test { public static void test1(){ try{ WeatherWebServiceStub stub = new WeatherWebServiceStub(); stub._getServiceClient().getOptions().setProperty( org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE); GetWeatherbyCityName city = new GetWeatherbyCityName(); city.setTheCityName("廣州"); ArrayOfString array = stub.getWeatherbyCityName(city).getGetWeatherbyCityNameResult(); String[] str = array.getString(); for(String s : str){ System.out.println(s); } }catch(Exception e){ e.printStackTrace(); } } /** * @param args */ public static void main(String[] args) throws Exception{ test1(); } }
原貼的說明,要看一下,有助理解:
需要注意的是這個類GetWeatherbyCityName,這個本來是.net webservice中的一個方法,如下
POST /WebServices/WeatherWebService.asmx HTTP/1.1 Host: www.webxml.com.cn Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://WebXml.com.cn/getWeatherbyCityName" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <getWeatherbyCityName xmlns="http://WebXml.com.cn/"> <theCityName>string</theCityName> </getWeatherbyCityName> </soap:Body> </soap:Envelope>
用axis2生成java程式碼後,會自動生成一個對應的物件,webservice需要傳遞的引數,可以通過對這個物件賦值操作完成,如上面,我要查廣州的天氣,就設定為city.setTheCityName("廣州");
注意,關鍵的地方
由於.net webservice中返回的是ArrayOfString,java中沒有這個物件,所以axis2會自動生成這個物件,然後轉換成對應的陣列即可,如String[] str = array.getString();在axis版本中,使用的是返回型別,但是返回型別設定其他的比如String等都會報錯,只能設定成VECTOR,即call.setReturnType(XMLType.SOAP_VECTOR),如果只返回一個字串,可以直接使用STRING;這樣才能確保返回正確。
這樣一來,很符合我這個沒什麼時間的懶人,因為有CodeGen。