Amazon Ads

顯示具有 Java Web Service 標籤的文章。 顯示所有文章
顯示具有 Java Web Service 標籤的文章。 顯示所有文章

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」了。

2013年8月16日 星期五

【筆記】超輕量的Web Service

記得拜歐還在Java的入門等級時,有嘗試過去用Java寫一個Web Service出來,那時在網路上找Sample Code照著作,有時還跑不出來,就深深地覺得Java Web Service是個怪獸級的東東,後來工作上沒碰到,也就沒在注意它了。

最近在工作上有使用到,加上要考證照,就每天都會碰到,就發現以為要寫一堆程式才能實現的,現在幾行程式就可以弄出一個可以跑的Web Service,這多虧了JAX-WS API,很多複雜的運作,都幫我們準備好了,底下使用一個範例,只要兩支程式,就可以執行為Web Service。

package idv.bio.ws;
import javax.jws.WebService;
@WebService
public class Calculator {
public int add(int a, int b){
return a + b;
}
}
上列中,值得一提的是「@WebService」這個annotation,只要加上這個,就表示這支Java就是一個Web Service的實作類別。

再來,使用「Endpoint」這個類別來發佈:

package idv.bio.ws;
import javax.xml.ws.Endpoint;
public class CalculatorPublisher {
public static void main(String[] args){
String url = "http://localhost:1234/cal";
Endpoint.publish(url, new Calculator());
System.out.println("Calculator Service published, url: " + url);
}
}
執行「CalculatorPublisher.class」之後,在Console應該可以看到下列訊息:

2013/8/16 下午 11:24:57 com.sun.xml.internal.ws.model.RuntimeModeler getRequestWrapperClass
資訊: Dynamically creating request wrapper Class idv.bio.ws.jaxws.Add
2013/8/16 下午 11:24:57 com.sun.xml.internal.ws.model.RuntimeModeler getResponseWrapperClass
資訊: Dynamically creating response wrapper bean Class idv.bio.ws.jaxws.AddResponse
Calculator Service published, url: http://localhost:1234/cal
把「http://localhost:1234/cal?wsdl」貼到你的瀏覽器上,可以看到WSDL,它是描述Web Service相關資訊的一個XML文件,如:


使用Soup UI去驗證,結果如下: