jdk釋出webservice服務
1.使用JAX-WS開發webservice
JAX-WS 的全稱為 Java API for XML-Based Webservices ,從java5開始支援JAX-WS2.0版本,Jdk1.6.0_13以後的版本支援2.1版本,jdk1.7支援2.2版本,本教程我們使用jdk1.7.0_07開發。
那麼如何才可以釋出一個WebService呢?
1:用Jdk1.6.0_13以後的版本釋出一個WebService服務,並通過位址列檢視它的wsdl文件.
2:通過wsimport生成客戶端程式碼,呼叫並檢視執行的結果.(學會如何呼叫是我們的重點).
3:從網際網路上獲取一個WebService網路公開的服務,並使用工具生成客戶端,呼叫並檢視結果。
測試程式碼包括服務端和客戶端的開發
1.3.1 服務端開發:
程式碼:
1.webservice服務介面
package webservice;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface HelloServiceInf {
@WebMethod
public String getCityInfo(String city);
}
2.webservice服務實現類
package webservice; import javax.jws.WebService; @WebService public class HelloServiceImp implements HelloServiceInf { @Override public String getCityInfo(String city) { // TODO Auto-generated method stub return "城市名稱為:"+city; } }
3.釋出webservice
package webservice;
import javax.xml.ws.Endpoint;
public class WebServicePublish {
public static void main(String[] args) {
String url= "http://192.168.17.104:8020/web";
Endpoint.publish(url, new HelloServiceImp());
System.out.println("webservice 釋出成功");
}
}
開啟瀏覽器,輸入剛才釋出的地址:
說明webservice釋出成功,接下來將客戶端怎麼呼叫
wsimport是jdk自帶的,可以根據wsdl文件生成客戶端呼叫程式碼的工具.當然,無論伺服器端的WebService是用什麼語言寫的,都將在客戶端生成Java程式碼.伺服器端用什麼語言編寫的並不重要.
wsimport.exe位於JAVA_HOME\bin目錄下.
例如:在cmd的視窗下執行wsimport可以看到
常用引數為:
-keep:是否生成Java原始檔
-d:指定.class檔案的輸出目錄
-s:指定.java檔案的輸出目錄
-p:定義生成類的包名,不定義的話有預設包名
-verbose:在控制檯顯示輸出資訊
-b:指定jaxws/jaxb繫結檔案或額外的schemas
-extension:使用擴充套件來支援SOAP1.2
示例:
wsimport其他引數說明,我們經常使用的引數為-d,-s,-p
-d<目錄>將會生成.class檔案.
示例:wsimport –d . http://192.168.17.104:8020/web?wsdl
-s<目錄>將會生成.java檔案.
示例:wsimport –s . http://192.168.17.104:8020/web?wsdl
-p<包名>將生成的檔案(.java或是.class修改成指定的包名)
示例:wsimport -s . -p cn http://192.168.17.104:8020/web?wsdl
這裡我們在c盤生成
之後將生成的java程式碼拷貝到客戶端,注意生成的java包名是否有衝突
客戶端程式碼引用如下:
package com.bojoy;
import webservice.HelloServiceImp;
import webservice.HelloServiceImpService;
public class CityClient {
public static void main(String[] args) {
HelloServiceImpService helloServiceImpService = new HelloServiceImpService();
HelloServiceImp helloServiceImpPort = helloServiceImpService.getHelloServiceImpPort();
String cityInfo = helloServiceImpPort.getCityInfo("上海");
System.out.println("客戶端呼叫webservice資訊為:"+cityInfo);
}
}
結果如下: