1. 程式人生 > >使用wsimport命令生成webService客戶端程式碼例項

使用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