Spring框架整合CXF WebService實現原理
Web service是一個平臺獨立的,低耦合的,自包含的、基於可程式設計的web的應用程式,可使用開放的XML(標準通用標記語言下的一個子集)標準來描述、發佈、發現、協調和配置這些應用程式,用於開發分散式的交互操作的應用程式。
SOAP RPC的工作原理:類似於web的請求/回應方式,不同之處在于web客戶和web伺服器之間傳輸的是HTML資料。在SOAP RPC模式中,SOAP客戶(程式)和SOAP服務之間傳輸的是符合SOAP規範的XML資料。
Web services使用兩種技術:
XML(標準通用標記語言下的一個子集):XML是在web上傳送結構化資料的偉大方式,Web services要以一種可靠的自動的方式運算元據,HTML(標準通用標記語言下的一個應用)不會滿足要求,
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)使用私密金鑰對報文的摘要進行加密,
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中的方法就可以獲取到資料了。