客戶端與服務端模式,非web端發布
1.1 【Jax-ws第一個例子】
1.1.1 第一步:服務端開發
- 編寫SEI(Service Endpoint Interface),SEI在webservice中稱為portType,在java中稱為接口。
代碼如下:
/**
* 天氣查詢服務接口
* @version V1.0
*/
public interface WeatherInterface {
//天氣查詢
public String queryWeather(String cityName);
}
- 編寫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優點
1、采用xml支持跨平台遠程調用。
2、基於http的soap協議,可跨越防火牆。
3、支持面向對象開發。
4、有利於軟件和數據重用,實現松耦合。
1.1.6 webservice缺點
由於soap是基於xml傳輸,本身使用xml傳輸會傳輸一些無關的東西從而效率不高,隨着soap協議的完善,soap協議增加了許多內容,這樣就導致了使用soap協議進行數據傳輸的效率不高。
如果要使用SOAP1.2版本也可,但是測試必須借助第三方,因為jdk不支持根據wsdl(SOAP1.2版本的)生成客戶端類,可以使用CXF生成並測試