WebService - CXF入門 簡單的服務端和客戶端
CXF
Apache CXF = Celtix + XFire,開始叫 Apache CeltiXfire,後來更名為 Apache CXF 了,以下簡稱為 CXF。CXF 繼承了 Celtix 和 XFire 兩大開源專案的精華,提供了對 JAX-WS 全面的支援,並且提供了多種 Binding 、DataBinding、Transport 以及各種 Format 的支援,並且可以根據實際專案的需要,採用程式碼優先(Code First)或者 WSDL 優先(WSDL First)來輕鬆地實現 Web Services 的釋出和使用。Apache CXF已經是一個正式的Apache頂級專案。
關於框架
Apache CXF 是一個開源的 Services 框架,CXF 幫助您利用 Frontend 程式設計 API 來構建和開發 Services ,像 JAX-WS 。這些 Services 可以支援多種協議,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,並且可以在多種傳輸協議上執行,比如:HTTP、JMS 或者 JBI,CXF 大大簡化了 Services 的建立,同時它繼承了 XFire 傳統,一樣可以天然地和 Spring 進行無縫整合。
功能特性
CXF 包含了大量的功能特性,但是主要集中在以下幾個方面:
支援 Web Services 標準:CXF 支援多種 Web Services 標準,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。Frontends:CXF 支援多種“Frontend”程式設計模型,CXF 實現了JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一個“simple frontend”允許客戶端和 EndPoint 的建立,而不需要 Annotation 註解。CXF 既支援 WSDL優先開發,也支援從 Java 的程式碼優先開發模式。容易使用: CXF 設計得更加直觀與容易使用。有大量簡單的 API 用來快速地構建程式碼優先的 Services,各種 Maven 的外掛也使整合更加容易,支援 JAX-WS API ,支援 Spring 2.0 更加簡化的 XML 配置方式,等等。支援二進位制和遺留協議:CXF 的設計是一種可插撥的架構,既可以支援 XML ,也可以支援非 XML 的型別繫結,比如:JSON 和 CORBA。
CXF優點:
CXF號稱是SOA框架,我們做WS只會用到XFire。
CXF內建Jetty Web伺服器。
使用CXF開發Web Server端元件都需要“介面”和“實現類”兩部分。
支援多種資料格式:XML和JSON(Restful)。
並可以與Spring進行快速無縫的整合
靈 活 的 部 署 : ant(build.xml) maven(pom.xml)
可 以 運 行 有Tomcat,Jboss,Jetty(內 置web 服 務器),IBM Websphere,Bea WebLogic上面。
進入官網http://cxf.apache.org/下載資源 (綠色版的解壓即可使用)
溫馨小提示:可配置環境變數方便以後使用 --> 方便命令wsdl2java的使用
cmd執行wsdl2java測試是否配置成功
專案使用:
匯入jar包
、
CXF - 服務端
注意:還要匯入如下jar包
如果沒有匯入則會出現以下錯誤
準備服務:
@WebService
public interface IWeatherService {
@WebMethod
@WebResult(name="weather")String getWeather(@WebParam(name="city")String city);
}
@WebService(endpointInterface="com.zhengqing.cxf.server.IWeatherService")
public class WeatherServiceImpl implements IWeatherService{
@WebMethod
public String getWeather(String city) {
return city+":陰雨綿綿";
}
}
釋出服務 :
public class PublishService {
public static void main(String[] args) {
// 1.建立JaxWsServerFactoryBean的物件,用於釋出服務
JaxWsServerFactoryBean serverFactoryBean = new JaxWsServerFactoryBean();
// 2.設定服務釋出地址
serverFactoryBean.setAddress("http://127.0.0.1:8080/getWeather");
// 3.設定服務釋出的介面
serverFactoryBean.setServiceClass(IWeatherService.class);
// 4.設定服務的釋出物件
serverFactoryBean.setServiceBean(new WeatherServiceImpl());
// 5.使用create方法釋出服務
serverFactoryBean.create();
System.out.println("服務釋出成功...");
}
}
執行:
釋出成功之後瀏覽器輸入地址可訪問:http://127.0.0.1:8080/getWeather?wsdl
CXF - 客戶端
新建專案 (lib下依然放和服務端一樣的13個jar包即可)
在src目錄資料夾下執行如下cmd命令 自動生成客戶端程式碼
wsdl2java -p com.zhengqing.cxf.client -encoding utf-8 http://127.0.0.1:8080/getWeather?wsdl
-p : 為執行之後src生成的包名
-encoding : 編碼
-s : 原始碼路徑
. : 代表當前路徑
-d : 編譯後class位元組碼路徑http://127.0.0.1:8080/getWeather?wsdl : ws釋出的服務地址
F5重新整理專案即可看見根據WebService的wsdl描述生成的客戶端程式碼
新建一個客戶端測試類
public class ClientTest {
public static void main(String[] args) {
// 1.建立JaxWsProxyFactoryBean的物件,用於接收服務
JaxWsProxyFactoryBean proxyFactoryBean = new JaxWsProxyFactoryBean();
// 2.設定服務的釋出地址,表示去哪裡過去服務
proxyFactoryBean.setAddress("http://127.0.0.1:8080/getWeather");
// 3.設定服務的釋出介面,使用本地的代理介面
proxyFactoryBean.setServiceClass(IWeatherService.class);
// 4.通過create方法返回介面代理例項
IWeatherService service = (IWeatherService) proxyFactoryBean.create();
// 5.呼叫遠端方法
System.out.println(service.getWeather("成都"));
}
}
執行:
這樣一個簡單的cxf 服務端和客戶端就弄好了哦~