2013年8月19日 星期一

【筆記】使用wsimport建立Java Web Service的用戶端程式

當你有一個WSDL的URL時,使用JAX-WS API來建立他的用戶端程式,是相對簡單的。如我們有一個WSDL如下:



它的URL如下:http://localhost:1234/cal?wsdl,若要撰寫一個用戶端程式去使用這個Web Service,我們要先產生它的代理程式(artifact),很方便地,在JDK 6中的「bin」目錄下,就有一個「wsimport」程式,可以讓我們用來產生用戶端程式所需的代理程式。

若在安裝Java時,有在「Path」中設定好Java的執行目錄(bin),則開啟「命令提示字元」,在「命令提示字元」輸入「wsimport」,應該會出現下列畫面中的結果,他會提示一些這個指令使時的說明。


接著把上列WSDL的URL代入到這個指令的參數中,為了方便,在「命令提示字元」先切換資料夾到事先建立好的Java專案目錄下的「src」中,然後輸入如下指令:「wsimport -keep -p idv.bio.ws.artifact http://localhost:1234/cal?wsdl」後按下「Enter」,執行結果如下:


其中,「-keep」是表示要產生原始碼,也就是Java檔,「-p」表示產生出來的Java檔中所屬套件設定。

在Eclipse中,重新整理之後,在「src」下,應該可以看到下列程式已經產生出來:



接著,先建立一個「idv.bio.ws.client」的套件,在之中新增一支「CalculatorClient.java」,其內容如下:

package idv.bio.ws.client;

import idv.bio.ws.artifact.Calculator;
import idv.bio.ws.artifact.CalculatorService;

public class CalculatorClient {

public static void main(String[] args) {
    CalculatorService service = new CalculatorService();
    Calculator port = service.getCalculatorPort();
    System.out.println("2 + 6 = " + port.add(2, 6));
  }
}

執行結果印出:2 + 6 = 8

說明:

  1. 程式的第一步,找出WSDL中, name="CalculatorService">對應的類別,它應該會繼承「javax.xml.ws.Service」這個類別,使用它產生一個物件。
  2. 然後使用上列物件,使用「getPort」的方法,得到一個對應到 name="Calculator">名字的介面的實作物件。
  3. 使用這個實作物件,就可以使用WSDL中,「portType」元素(element)內定義的「operation」了。

沒有留言: