使用wsimport命令生成webService客戶端程式碼例項
wsimport簡介
在JDK的bin資料夾中,有一個wsimport.exe工具,可依據wsdl檔案生成相應的類檔案,將生存在本地這些類檔案拷貝到需要使用的專案中,就可以像呼叫本地的類一樣呼叫webService提供的方法。該工具可以用於非Java的伺服器,如用C#編寫的WebService,通過wsimport則生成Java的客戶端實現。
常用命令如下:
wsimport -keep -d D:\temp\d -s D:\temp\s -p com.map -verbose http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
-keep:是否生成java原始檔
-d:指定.class檔案的輸出目錄
-s:指定.java檔案的輸出目錄
-p:定義生成類的包名,不定義的話有預設包名
-verbose:在控制檯顯示輸出資訊
-b:指定jaxws/jaxb繫結檔案或額外的schemas
-extension:使用擴充套件來支援SOAP1.2
wsimport例項
在此,推薦一個網站,提供了全面的WebService介面供參考:http://www.webxml.com.cn/zh_cn/web_services.aspx
在本地生成查詢號碼歸屬地的webService
(1) 進入網站找到
其中,.asmx網址說明了呼叫的方法、輸入引數、返回資料,.wsdl是我們要用來生成程式碼的網址。
(2) 新建一個Java Project,工程建立好後,生成src目錄
(3) cmd命令,進入jdk的bin目錄下執行命令:
wsimport -keep -s D:\Workspaces -p com.cn.phone -verbose http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl
-s後的路徑如果不是工程的src目錄,需把生成的包拷貝到src目錄下
重新整理專案,便會看到我們生成的檔案了
當我們點選幾個java檔案看時,是不是發現中文註釋亂碼了,如果想把原始碼的編碼變成UTF-8,可以下載一個工具:UTFCastExpress
http://download.csdn.net/detail/aqsunkai/9535166
(4) 在該路徑下寫測試類:
package com.cn.phone;
public class PhoneWsClient {
public static void main(String[] args){
//建立一個MobileCodeWS工廠
MobileCodeWS factory = new MobileCodeWS();
//根據工廠建立一個MobileCodeWSSoap物件
MobileCodeWSSoap mobileCodeWSSoap = factory.getMobileCodeWSSoap();
//呼叫WebService提供的getMobileCodeInfo方法查詢手機號碼的歸屬地
String searchResult = mobileCodeWSSoap.getMobileCodeInfo("18512155752", null);
System.out.println(searchResult);
}
}
執行main方法後:
在本地生成查詢天氣預報的webService
直接使用wsimport 通過該地址生成Java檔案時,會報錯。因為該wsdl裡面包含 ref = "s:schema" 這樣的引用。而jaxb是不支援的。所以需要手動將該wsdl下載下來做下修改,然後再生成java檔案。
(1) 將頁面另存為
(2) 將所有的<s:element ref="s:schema" />
<s:any />改成 <s:any minOccurs="2" maxOccurs="2"/>,一共有三處需要修改,建議查詢<s:element ref="s:schema" />,修改時把<s:any />也要刪掉
(3) 執行命令:
wsimport -keep -s D:\Workspaces -p com.cn.weather -verbose C:\Users\sun\Desktop\WeatherWS.xml
(4) 把生成的包拷貝到src目錄下
需要注意的是,要修改WeatherWS.java檔案中wsdl的url,因為我們用的是本地檔案生成的,要修改成網站的url:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl
(5) 在該路徑下寫測試類
package com.cn.weather;
import java.util.List;
public class WeatherWsClient {
public static void main(String[] args) {
//建立一個WeatherWS工廠
WeatherWS factory = new WeatherWS();
//根據工廠建立一個WeatherWSSoap物件
WeatherWSSoap weatherWSSoap = factory.getWeatherWSSoap();
//呼叫WebService提供的getWeather方法獲取南寧市的天氣預報情況
ArrayOfString weatherInfo = weatherWSSoap.getWeather("釣魚島", null);
List<String> lstWeatherInfo = weatherInfo.getString();
//遍歷天氣預報資訊
for (String string : lstWeatherInfo) {
System.out.println(string);
System.out.println("------------------------");
}
//獲得中國省份、直轄市、地區和與之對應的ID
ArrayOfString s = weatherWSSoap.getRegionProvince();
List<String> list = s.getString();
for (String string : list) {
System.out.println(string);
System.out.println("------------------------");
}
}
}
執行main方法後:
---------------------
原文:https://blog.csdn.net/aqsunkai/article/details/51711087