JDK 6.0中web service的使用淺析
首先我們來(lái)認(rèn)識(shí)一下JDK 6.0中web service,Java 6.0 之后,其中JDK自帶有個(gè)輕量級(jí)的web service 服務(wù)器。如果你比較細(xì)心一定發(fā)現(xiàn)在你安裝Java的路徑下,有Java webservice 的示例代碼。
以前也用Java開(kāi)發(fā)過(guò)web service ,但是當(dāng)初用了一個(gè)apache 下axis開(kāi)源項(xiàng)目。不過(guò)Java自帶有何必舍近求遠(yuǎn)呢。今天我就把自己創(chuàng)建的最簡(jiǎn)單Java webservice 范例過(guò)程記錄下來(lái),與大家分享。
我用的是Netbeans 6,首先建立一個(gè)Java 應(yīng)用程序工程,名為WebServices。建立一個(gè)服務(wù)端程序。
package WebServices;
- import javax.jws. * ;
- import javax.xml.ws.Endpoint;
- /**
- * @author hecm
- */
- @WebService(targetNamespace = " http://www.blogjava.net/JAVA-HE " ,
- serviceName = " HelloService " )
- public class WSProvider
- {
- // @WebResult(name = "Greetings") // 自定義該方法返回值在WSDL中相關(guān)的描述
- @WebMethod(action = " sayHi " , operationName = " sayHi " )
- public String sayHi(@WebParam(name = " MyName " ) String name)
- {
- return " Hi, " + name; // @WebParam是自定義參數(shù)name在WSDL中相關(guān)的描述
- }
- @Oneway // 表明該服務(wù)方法是單向的,既沒(méi)有返回值,也不應(yīng)該聲明檢查異常
- @WebMethod(action = " printSystemTime " , operationName = " printSystemTime " )
- // 自定義該方法在WSDL中相關(guān)的描述
- public void printTime()
- {
- System.out.println(System.currentTimeMillis());
- }
- public static void main(String[] args)
- {
- Thread wsPublisher = new Thread( new WSPublisher());
- wsPublisher.start();
- }
- private static class WSPublisher implements Runnable
- {
- public void run()
- {
- // 發(fā)布WSProvider到http: // localhost:8888/hechangmin/WSProvider這個(gè)地址,之前必須調(diào)用wsgen命令
- // 生成服務(wù)類WSProvider的支持類,命令如下:
- // wsgen -cp . WebServices.WSProvider
- Endpoint.publish("http://localhost:8888/JAVA-HE/WSProvider", new WSProvider());
- }
- }
- }
在JDK 6.0中web service建立對(duì)應(yīng)的包,就不用說(shuō)了。
然后編譯文件。
進(jìn)入命令提示符下,進(jìn)入classes目錄,運(yùn)行:wsgen -cp . WebServices.WSProvider
可以看到將剛才的class 生成了幾個(gè)Java文件和class文件。
現(xiàn)在要做的是發(fā)布ws到http://localhost:8888/chinajash/WSProvider
而實(shí)際上的動(dòng)作就是:Endpoint.publish("http://localhost:8888/chinajash/WSProvider",new WSProvider());
當(dāng)然直接運(yùn)行WSProvider 。
然后輸入http://localhost:8888/JAVA-HE/WSProvider?wsdl
就已經(jīng)查看到生成的wsdl (webservice 描述語(yǔ)言)。
也就是服務(wù)端就OK了。
保持運(yùn)行。編寫(xiě)一個(gè)測(cè)試客戶端:
首先選擇項(xiàng)目,右鍵新建 web服務(wù)客戶端。其中ws url填入剛才生成的wsdl地址:
http://localhost:8888/JAVA-HE/WSProvider?wsdl
(實(shí)際上:和wsimport http://localhost:8888/JAVA-HE/WSProvider?wsdl 一樣的效果)
產(chǎn)生一個(gè)效果:在classes下 按照 之前指定的名字空間產(chǎn)生的包下(目錄結(jié)構(gòu))生成了7個(gè)幫助class。
然后我們建立一個(gè)包 client 建立測(cè)試文件:
- /*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
- package client;
- import net.blogjava.java_he. * ;
- /**
- *
- * @author hecm
- */
- public class Test {
- public static void main(String args[])
- {
- HelloService hs = new HelloService();
- WSProvider ws = hs.getWSProviderPort();
- System.out.println(ws.sayHi( " hechangmin " ));
- ws.printSystemTime();
- }
- }
運(yùn)行這個(gè)測(cè)試類:
Hi,hechangmin
輸出了。
JDK 6.0中web service的使用順利完成!
那么以上JDK 6.0中web service的使用是一點(diǎn)個(gè)人經(jīng)驗(yàn),你發(fā)布的地址***寫(xiě)成可配置。還有就是wsdl 中會(huì)嚴(yán)格按照你指定的url來(lái)訪問(wèn),比如你指定的127.0.0.1 那么你用本機(jī)IP的時(shí)候也許并不能順利訪問(wèn)。
【編輯推薦】