客戶端與服務端模式,非web端發佈
1.1 【Jax-ws第一個例子】
1.1.1 第一步:服務端開發
- 編寫SEI(Service Endpoint Interface),SEI在webservice中稱爲portType,在java中稱爲接口。
代碼以下:java
/**web
* 天氣查詢服務接口服務器
* @version V1.0ide
*/工具
public interface WeatherInterface {測試
//天氣查詢url
public String queryWeather(String cityName);spa
}.net
- 編寫SEI實現類,此類做爲webservice提供服務類
代碼以下:命令行
@WebService
public class WeatherInterfaceImpl implements WeatherInterface {
@Override
public String queryWeather(String cityName) {
System.out.println("from client.."+cityName);
String result = "晴朗";
System.out.println("to client..."+result);
return result;
}
public static void main(String[] args) {
//發送webservice服務
Endpoint.publish("http://192.168.1.100:1234/weather", new WeatherInterfaceImpl());
}
}
注意:
SEI實現類中至少要有一個非靜態的公開方法須要做爲webservice服務方法。
public class 上邊要加上@WebService
- endpoint發佈服務
//發送webservice服務
Endpoint.publish("http://192.168.1.100:1234/weather", new WeatherInterfaceImpl());
1.1.2 第二步:查看wsdl
Webservice發佈成功,經過wsdl查看webservice發佈的正確性
- 在地址欄輸入(注意後面的參數?wsdl)
http://192.168.1.100:1234/weather?wsdl
- Wsdl不是webService,只是獲取一個用於描述WebService的說明文件
- wsdl- WebServiceDescriptionLanguage,是以XML文件形式來描述WebService的」說明書」,有了說明書,咱們才能夠知道如何使用或是調用這個服務.
1.1.3 第三步:Wsimport生成客戶端調用類
1.1.3.1 Wsimport介紹
wsimport是jdk自帶的webservice客戶端工具,能夠根據wsdl文檔生成客戶端調用代碼(java代碼).固然,不管服務器端的WebService是用什麼語言寫的,均可以生成調用webservice的客戶端代碼,服務端經過客戶端代碼調用webservice。
wsimport.exe位於JAVA_HOME\bin目錄下.
經常使用參數爲:
-d<目錄> - 將生成.class文件。默認參數。
-s<目錄> - 將生成.java文件。
-p<生成的新包名> -將生成的類,放於指定的包下。
(wsdlurl) - http://server:port/service?wsdl,必須的參數。
示例:
C:/> wsimport –s . http://127.0.0.1:1234/weather?wsdl
注意:-s不能分開,-s後面有個小點
1.1.3.2 客戶端生成注意事項:
- 能夠經過java –version檢查你當前的版本號保存是jdk1.6以上。Jdk1.6.0_13之後的版本支持jaxws2.1。
- 在Eclipse中建立一個空的java工程爲wsimport,此工程做爲存放客戶端代碼。
- cmd命令行進入此wsimport 工程的src目錄,
輸入如下命令:
參數說明:-s是指編譯出源代碼文件,後面的.(點)指將代碼放到當前目錄下.
最後面的http….是指獲取wsdl說明書的地址.
- 生成完成,刷新Eclipse中wsimport工程,將src下生成.java文件代碼Copy到webservice客戶端工程(見下)中。
1.1.4 第四步:客戶端編寫
代碼以下:
/**
* 天氣查詢客戶端
* @version V1.0
*/
public class WeatherClient {
public static void main(String[] args) {
//建立服務視圖
WeatherInterfaceImplService weatherInterfaceImplService =new WeatherInterfaceImplService();
//經過服務視圖獲得服務端點
WeatherInterfaceImpl weatherInterfaceImpl= weatherInterfaceImplService.getPort(WeatherInterfaceImpl.class);
//調用webservice服務方法
String result = weatherInterfaceImpl.queryWeather("鄭州");
System.out.println(result);
}
}
1.1.5 webservice優勢
一、採用xml支持跨平臺遠程調用。
二、基於http的soap協議,可跨越防火牆。
三、支持面向對象開發。
四、有利於軟件和數據重用,實現鬆耦合。
1.1.6 webservice缺點
因爲soap是基於xml傳輸,自己使用xml傳輸會傳輸一些無關的東西從而效率不高,隨着soap協議的完善,soap協議增長了許多內容,這樣就致使了使用soap協議進行數據傳輸的效率不高。
若是要使用SOAP1.2版本也可,可是測試必須藉助第三方,由於jdk不支持根據wsdl(SOAP1.2版本的)生成客戶端類,能夠使用CXF生成並測試