1. 程式人生 > >WebService - CXF入門 簡單的服務端和客戶端

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 服務端和客戶端就弄好了哦~