2008年11月24日 星期一

JDK 6.0自帶web service

JAVA 6.0之後,其中JDK自帶有個輕量級的web service服務器。如果你比較細心一定發現在你安裝java的路徑下,有java webservice的示例代碼。

我 以前也用java開發過web service ,但是當初用了一個apache下axis開源項目。如果axis夜進化了,反正我不認識了。不過java自帶有何必捨近求遠呢。今天我就把自己創建的最 簡單java webservice範例過程記錄下來,與大家分享。

我用的是netbeans 6,首先建立一個java應用程序工程,名為WebServices。建立一個服務端程序。
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中相關的描述
@WebMethod(action = " sayHi " , operationName = " sayHi " )
public String sayHi(@WebParam(name = " MyName " ) String name)
{
return " Hi, " name; // @WebParam是自定義參數name在WSDL中相關的描述

}

@Oneway //表明該服務方法是單向的,既沒有返回值,也不應該聲明檢查異常

@WebMethod(action = " printSystemTime " , operationName = " printSystemTime " ) //自定義該方法在WSDL中相關的描述
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()
{
//發布WSProvider到http: // localhost:8888/hechangmin/WSProvider這個地址,之前必須調用wsgen命令
//生成服務類WSProvider的支持類,命令如下:
// wsgen -cp . WebServices.WSProvider
Endpoint.publish("http://localhost:8888/JAVA-HE/WSProvider", new WSProvider());
}
}
}

當然建立對應的包,就不用說了。
然後編譯文件。
進入命令提示符下,進入classes目錄,運行:wsgen -cp . WebServices.WSProvider

可以看到將剛才的class生成了幾個java文件和class文件。

現在要做的是發布ws到http://localhost:8888/chinajash/WSProvider
而實際上的動作就是:Endpoint.publish("http://localhost:8888/chinajash/WSProvider",new WSProvider());
當然直接運行WSProvider 。

然後輸入http://localhost:8888/JAVA-HE/WSProvider?wsdl

就已經查看到生成的wsdl (webservice描述語言)。

也就是服務端就OK了。

保持運行。編寫一個測試客戶端:

首先選擇項目,右鍵新建web服務客戶端。其中ws url填入剛才生成的wsdl地址:
http://localhost:8888/JAVA-HE/WSProvider?wsdl

(實際上:和wsimport http://localhost:8888/JAVA-HE/WSProvider?wsdl一樣的效果)


產生一個效果:在classes下按照之前指定的名字空間產生的包下(目錄結構)生成了7個幫助class。

然後我們建立一個包client建立測試文件:



/*
* 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();
}

}







運行這個測試類:
Hi,hechangmin

輸出了。順利完成!

一點個人經驗,你發布的地址最好寫成可配置。還有就是wsdl中會嚴格按照你指定的url來訪問,比如你指定的127.0.0.1那麼你用本機IP的時候也許並不能順利訪問。

Source: http://www.blogjava.net/JAVA-HE

沒有留言: