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://m.tkk7.com/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的時候也許并不能順利訪問。
posted on 2008-07-08 02:59
-274°C 閱讀(64563)
評論(3) 編輯 收藏 所屬分類:
JAVA 、
WebService 、
JSP