華文網

Spring框架整合CXF WebService實現原理

Web service是一個平臺獨立的,低耦合的,自包含的、基於可程式設計的web的應用程式,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、發佈、發現、協調和配置這些應用程式,用於開發分散式的交互操作的應用程式。

關於Java webService框架,主要有AXIS、XFire、CXF,還有Java自帶的JAX-WS(必須JDK6以上環境)。

SOAP RPC的工作原理:類似於web的請求/回應方式,不同之處在于web客戶和web伺服器之間傳輸的是HTML資料。在SOAP RPC模式中,SOAP客戶(程式)和SOAP服務之間傳輸的是符合SOAP規範的XML資料。

Web services使用兩種技術:

XML(標準通用標記語言下的一個子集):XML是在web上傳送結構化資料的偉大方式,Web services要以一種可靠的自動的方式運算元據,HTML(標準通用標記語言下的一個應用)不會滿足要求,

而XML可以使web services十分方便的處理資料,它的內容與表示的分離十分理想;

SOAP:SOAP使用XML消息調用遠端方法,這樣web services可以通過HTTP協議的post和get方法與遠端機器交互,而且,SOAP更加健壯和靈活易用;

其他像UDDI和WSDL技術與XML和SOAP技術緊密結合用於服務實現。

1、AXIS是apache軟體組織對SOAP規範的實現。

SOAP客戶程式——>AXIS API—RPC請求—>AXIS web應用(SOAP服務),此web應用可以放在Tomcat容器中。

在AXIS上創建和發佈基於RPC的SOAP服務步驟:

a、創建實現SOAP服務的java類;

b、創建SOAP服務的發佈描述檔;

c、通過AXIS的AdminClient客戶程式發佈SOAP服務;

一個web容器中的web應用———遠端存取———>另一個web容器中的AXIS應用(SOAP服務)

2、web服務開源框架XFire

XFire是下一代的java soap開源框架。XFire提供了方便的API,使用這些API可以開發面向服務(SOA)的程式。XFire是codehaus組織一個web服務開源框架專案,官方主頁為http://xfire.codehaus.org.

主要特性包括:

a、支援多個重要的webservice標準,包括SOAP、WSDL等。

b、支持JSR181,可以通過JDK5中的注解配置web服務。

c、支援基於HTTP、JMS等多種協定訪問web服務。

d、支持spring、Pico等多種容器。

e、支援用戶端和伺服器代碼生成。

XFire與spring集成(XFire運行在spring容器中)XFire提供了對spring的集成,可配置spring bean來提供web服務。

a、配置spring bean在web.xml檔中增加spring的配置,同時將XFire的bean設定檔加入到spring容器中。

b、配置XFire Servlet在spring容器中,需配置org.codehaus.xfire.spring.XFireSpringServlet類集中處理web服務的servlet請求。

c、配置web服務Bean在配置spring容器中的bean,此時XFire運行在spring容器中,故不再需要配置servicers.xml文件,而是在applicationContext.xml配置bean。

web服務安全說明

提供服務安全機制,通過數位簽章(signature)使用私密金鑰對報文的摘要進行加密,

只有報文在傳輸過程中不被篡改,接收端在進行數位簽章驗證時才可能成功。雖然數位簽章解決了完整性和不可抵賴性的安全問題,但消息體還是以明文的方式進行發送,在傳輸過程中,消息體的內容可能被監視。此時需要加密(encryption)。

3、CXF與Spring完美集成方案

(1)新建Web工程,如CxfDemo,在pom.xml中添加依賴代碼如下:

org.apache.cxfcxf-rt-frontend-jaxws2.6.2org.apache.cxfcxf-rt-transports-http2.6.2

定義介面,使用@webservice注解,代碼如下:

實現類,@WebService注解表示是要發佈的web服務,endpointInterface參數的值是該服務類對應的介面。

配置applicationcontext-spring檔,具體代碼如下:

implementor參數:指明具體的實現類;address參數:指明這個webservice的相對位址。

web.xml檔添加如下配置,具體代碼如下:

部署到web伺服器上,發佈webservice工程,輸入http://localhost:8080/CxfDemo/Hello?wsdl

(2)創建用戶端調用WebService服務測試

//創建WebService用戶端代理工廠

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();

//註冊WebService介面

factory.setServiceClass(HelloService.class);

//設置WebService位址

factory.setAddress(http://localhost:8080/CxfDemo/Hello);

HelloService hello = (HelloService)factory.create();

//調用webservice介面方法

hello.sayHello("hello");//返回sucess

定義介面,代碼如下:

配置applicationcontext-spring檔,具體代碼如下:

在Action方法中引用@Resource注解,代碼如下:

此時action中調用此HelloService中的方法就可以獲取到資料了。

定義介面,代碼如下:

配置applicationcontext-spring檔,具體代碼如下:

在Action方法中引用@Resource注解,代碼如下:

此時action中調用此HelloService中的方法就可以獲取到資料了。