JAX-WS全稱Java? API for XML Web Services,是隨著JDK1.6及其后續(xù)版本發(fā)布的方便Java程序員開發(fā)WebService應(yīng)用的一組API,通常簡稱為JWS,目前版本為2.x。
使用JAX-WS編寫WebService非常簡單,下面介紹WebService服務(wù)端及客戶端實現(xiàn)。
一、開發(fā)WebService服務(wù)端
1.Web服務(wù)的接口稱為SEI,我們首先要用定義一個接口HelloWorld,使用@WebService注解修飾接口名,使用@WebParam修飾需要對外發(fā)布的方法,代碼如下:
package com.csdn.jaxws.recipe01;import javax.jws.WebMethod;import javax.jws.WebService;@WebServicepublic interface HelloWorld { @WebMethod String sayHello(String text);}
2.WEB服務(wù)接口的實現(xiàn)類稱為SIB,接下來我們需要實現(xiàn)HelloWorld接口:
package com.csdn.jaxws.recipe01;import javax.jws.WebService;@WebService(endpointInterface = "com.csdn.jaxws.recipe01.HelloWorld") public class HelloWorldImpl implements HelloWorld { @Override public String sayHello(String name) { return "hello," + name; }}
3.服務(wù)接口和實現(xiàn)類已經(jīng)編寫完成,接著需要編寫發(fā)布類HelloWorldService:
package com.csdn.jaxws.recipe01;import javax.xml.ws.Endpoint;public class HelloWorldService { public static void main(String[] args) { HelloWorld hw = new HelloWorldImpl(); Endpoint.publish("http://localhost:9089/service/HelloWorld", hw); }}
4.編譯運行HelloWorldService 類,如果控制臺沒有錯誤信息,說明我們的WebService已經(jīng)發(fā)布成功。
5.每個WebService都會有一個與之對應(yīng)的WSDL文檔,我們可以在WebService的URL后追加?WSDL查看,打開瀏覽器輸入http://localhost:9089/service/HelloWorld?wsdl
,可以查看wsdl文檔。
二、WebService客戶端編寫
WebService的客戶端調(diào)用通常有兩種,第一種使用RPC方式,第二種是使用JDK自帶的wsimport工具生成客戶端代碼,使用這種方式較為簡單,就像是在本地直接調(diào)用服務(wù)端代碼一樣。
下面介紹如何使用wsimport生成客戶端代碼,并實現(xiàn)webservice調(diào)用。
1.新建一個eclipse工程,使用控制臺進入工程的src目錄,輸入:
wsimport -keep http://localhost:9089/service/HelloWorld?wsdl
工具執(zhí)行完畢后生成客戶端代碼如下:
package com.csdn.jaxws.recipe01.client;import com.csdn.jaxws.recipe01.HelloWorldImpl;import com.csdn.jaxws.recipe01.HelloWorldImplService;public class Recipe01Client { public static void main(String[] args) { //創(chuàng)建HelloWorldImplService對象 HelloWorldImplService hws = new HelloWorldImplService(); //通過getHelloWorldImplPort方法獲取HelloWorldImpl實例 HelloWorldImpl hw = hws.getHelloWorldImplPort(); //使用HelloWorldImpl實例,像直接調(diào)用服務(wù)端方法一樣,調(diào)用Web服務(wù),獲取WebService響應(yīng)數(shù)據(jù) String retVal = hw.sayHello("Jone"); System.out.println(retVal); }}
你可以已經(jīng)猜到,運行程序控制臺輸出:hello,Jone