1. 程式人生 > >使用webService例項

使用webService例項

1、先來介紹一下什麼是web service Web service是一個平臺獨立的,低耦合的,自包含的、基於可程式設計的web的應用程式,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、釋出、發現、協調和配置這些應用程式,用於開發分散式的互操作的應用程式。 [1] Web Service技術, 能使得執行在不同機器上的不同應用無須藉助附加的、專門的第三方軟體或硬體, 就可相互交換資料或整合。依據Web Service規範實施的應用之間, 無論它們所使用的語言、 平臺或內部協議是什麼, 都可以相互交換資料。Web Service是自描述、 自包含的可用網路模組, 可以執行具體的業務功能。Web Service也很容易部署, 因為它們基於一些常規的產業標準以及已有的一些技術,諸如標準通用標記語言下的子集XML、HTTP。Web Service減少了應用介面的花費。Web Service為整個企業甚至多個組織之間的業務流程的整合提供了一個通用機制。 2、 在JDK的bin資料夾中,有一個wsimport.exe工具,可依據wsdl檔案生成相應的類檔案,將生存在本地這些類檔案拷貝到需要使用的專案中,就可以像呼叫本地的類一樣呼叫webService提供的方法。該工具可以用於非Java的伺服器,如用C#編寫的WebService,通過wsimport則生成Java的客戶端實現。

-keep:是否生成java原始檔

-d:指定.class檔案的輸出目錄

-s:指定.java檔案的輸出目錄

-p:定義生成類的包名,不定義的話有預設包名

-verbose:在控制檯顯示輸出資訊

-b:指定jaxws/jaxb繫結檔案或額外的schemas

這上面你可以呼叫別人寫好的服務。這裡我們使用兩個例項簡單演示一下:手機號歸屬地查詢和天氣預告查詢。 <1>首先點選這個 這裡寫圖片描述 <2>開啟cmd 新建一個目錄,進入該目錄 <3>使用命令

wsimport -s .  http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx
?wsdl

這樣程式碼就下載到我們新建的目錄下面了。 複製生成的程式碼,新建一個java工程 這裡寫圖片描述

<3>編寫一個測試類test.java

public class test {

    public static void main(String[] args) {
        MobileCodeWS ms = new MobileCodeWS();
        MobileCodeWSSoap mobileCodeWSSoap = ms.getMobileCodeWSSoap();
        //此處填寫手機號
        String mobileCodeInfo = mobileCodeWSSoap.getMobileCodeInfo("137854309"
, null); System.out.println(mobileCodeInfo); } }

執行即可查詢出來,怎麼樣簡單吧,下面來個天氣預報的演示。

和上面不同的是直接使用wsimport 通過該地址生成Java檔案時,會報錯。因為該wsdl裡面包含 ref = “s:schema” 這樣的引用。而jaxb是不支援的。所以需要手動將該wsdl下載下來做下修改,然後再生成java檔案。

(1) 將頁面另存為 這裡寫圖片描述 這裡寫圖片描述 這裡寫圖片描述

(2) 將所有的

<s:element ref="s:schema" />
<s:any />

改成 ,一共有三處需要修改 建議查詢,修改時把也要刪掉。 (3) 執行命令: 這裡寫圖片描述 注意:路徑是我們本地的路徑 (4)生成程式碼後同樣新建一個工程,然後複製程式碼過去(注意:完整的包都要複製過去,不然會有問題) 這裡寫圖片描述 (5) 到這裡後還需要修改一個地方:

WeatherWS.java 檔案中的 這個地方的本地路徑要修改成

http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl

這裡寫圖片描述 (6) 編寫測試類


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("------------------------");
         }
    }
結果如下:

這裡寫圖片描述