WebService—規範介紹和幾種實現WebService的框架介紹

1、關於SOA(面向服務架構)思想
 
一、關於協議
 
二、SOA 的誕生
SOA(Service-Oriented Architecture)面向服務架構是一種思想,它將應用程序的不一樣功能單元經過中立的契約(獨立於硬件平臺、操做系統和編程語言)聯繫起來,使得各類形式的功能單元更好的集成。目前來講,WebService 是SOA 的一種較好的實現方WebService 採用HTTP 做爲傳輸協議,SOAP(Simple Object Access Protocol)做爲傳輸消息的格式。但WebService 並非徹底符合SOA 的概念,由於SOAP 協議是WebService 的特有協議,並未符合SOA 的傳輸協議透明化的要求。SOAP 是一種應用協議,早期應用於RPC 的實現,傳輸協議能夠依賴於HTTP、SMTP 等。SOA 的產生共經歷了以下過程:
一般採用SOA 的系統叫作服務總線(BUS),結構以下圖所示:
 
 
2、JAVA 三種WebService 規範,分別是JAXM&SAAJ、JAX-WS(JAX-RPC)、JAX-RS。
 
(1.)JAX-WS:
JAX-WS(Java API For XML-WebService),JDK1.6 自帶的版本爲JAX-WS2.1,其底層支持爲JAXB。早期的基於SOAP 的JAVA 的Web 服務規範JAX-RPC(Java API For
XML-Remote Procedure Call)目前已經被JAX-WS 規範取代,JAX-WS 是JAX-RPC 的演進版本,但JAX-WS 並不徹底向後兼容JAX-RPC,兩者最大的區別就是RPC/encoded 樣式的WSDL,JAX-WS 已經不提供這種支持。JAX-RPC 的API 從JAVA EE5 開始已經移除,若是你使用J2EE1.4,其API 位於javax.xml.rpc.*包。JAX-WS(JSR 224)規範的API 位於javax.xml.ws.*包,其中大部分都是註解,提供API 操做Web 服務(一般在客戶端使用的較多,因爲客戶端能夠藉助SDK 生成,所以這個包中的API 咱們較少會直接使用)。WS-MetaData(JSR 181)是JAX-WS 的依賴規範,其API 位於javax.jws.*包,使用註解配置公開的Web 服務的相關信息和配置SOAP 消息的相關信息。
 
(2.)JAXM&SAAJ:
JAXM(JAVA API For XML Message)主要定義了包含了發送和接收消息所需的API,至關於Web 服務的服務器端,其API 位於javax.messaging.*包,它是JAVA EE 的可選包,所以你須要單獨下載。SAAJ(SOAP With Attachment API For Java,JSR 67)是與JAXM 搭配使用的API,爲構建SOAP 包和解析SOAP 包提供了重要的支持,支持附件傳輸,它在服務器端、客戶端都須要使用。這裏還要提到的是SAAJ 規範,其API 位於javax.xml.soap.*包。JAXM&SAAJ 與JAX-WS 都是基於SOAP 的Web 服務,相比之下JAXM&SAAJ 暴漏了SOAP更多的底層細節,編碼比較麻煩,而JAX-WS 更加抽象,隱藏了更多的細節,更加面向對象,實現起來你基本上不須要關心SOAP 的任何細節。那麼若是你想控制SOAP 消息的更多細節,可使用JAXM&SAAJ,2012年版本爲1.3。
 
(3.)JAX-RS:
JAX-RS 是JAVA 針對REST(Representation State Transfer)風格制定的一套Web 服務規範,因爲推出的較晚,該規範(JSR 311,目前JAX-RS 的版本爲1.0)並未隨JDK1.6 一塊兒發行,你須要到JCP 上單獨下載JAX-RS 規範的接口,其API 位於javax.ws.rs.*包。
這裏的JAX-WS 和JAX-RS 規範咱們採用Apache CXF 做爲實現,CXF 是Objectweb Celtix和Codehaus XFire 合併而成。CXF 的核心是org.apache.cxf.Bus(總線),相似於Spring 的ApplicationContext,Bus 由BusFactory 建立,默認是SpringBusFactory 類,可見默認CXF是依賴於Spring 的,Bus 都有一個ID,默認的BUS 的ID 是cxf。你要注意的是Apache CXF2.2 的發行包中的jar 你若是直接所有放到lib 目錄,那麼你必須使用JDK1.6,不然會報JAX-WS 版本不一致的問題。對於JAXM&SAAJ 規範咱們採用JDK 中自帶的默認實現。

 

 

3、幾種Web Service框架的基本概念介紹html

一、JWSjava

JWS是Java語言對WebService服務的一種實現,用來開發和發佈服務。而從服務自己的角度來看JWS服務是沒有語言界限的。可是Java語言爲Java開發者提供便捷發佈和調用WebService服務的一種途徑。web

 
二、Axis2
Axis2是Apache下的一個重量級WebService框架,準確說它是一個Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能製做和發佈WebService,並且能夠生成Java和其餘語言版WebService客戶端和服務端代碼。這是它的優點所在。可是,這也不可避免的致使了Axis2的複雜性,使用過的開發者都知道,它所依賴的包數量和大小都是很驚人的,打包部署發佈都比較麻煩,不能很好的與現有應用整合爲一體。可是若是你要開發Java以外別的語言客戶端,Axis2提供的豐富工具將是你不二的選擇。Axis2的開發方式相似一個小型的應用服務器,Axis2的開發包要以WAR的形式部署到Servlet容器中,好比Tomcat,經過這些容器能夠對工做中的Web Service進行很好的監控和管理。Axis2的Web administrion模塊可讓咱們動態的配置Axis2.一個新的服務能夠上載,激活,使之失效,修改web服務的參數。管理UI也能夠管理一個或者多個處於運行狀態的服務。這種界面化管理方式的一個弊端是全部在運行時修改的參數沒有辦法保存,由於在重啓動以後,你所作的修改就會所有失效。Axis2容許本身做爲獨立的應用來發布Web Service,並提供了大量的功能和一個很好的模型,這個模型能夠經過它自己的架構(modular architecture)不斷添加新的功能。有些開發人員認爲這種方式對於他們的需求太過於繁瑣,從而會更喜歡CXF。
 
三、XFire
XFire是一個高性能的WebService框架,在Java6以前,它的知名度甚至超過了Apache的Axis2,XFire的優勢是開發方便,與現有的Web整合很好,能夠融爲一體,而且開發也很方便。可是對Java以外的語言,沒有提供相關的代碼工具。XFire後來被Apache收購了,緣由是它太優秀了,收購後,隨着Java6 JWS的興起,開源的WebService引擎已經再也不被看好,漸漸的都敗落了。
 
四、CXF
Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire。CXF 繼承了 Celtix 和 XFire 兩大開源項目的精華,提供了對 JAX-WS 全面的支持,而且提供了多種 Binding 、DataBinding、Transport 以及各類 Format 的支持,而且能夠根據實際項目的須要,採用代碼優先(Code First)或者 WSDL 優先(WSDL First)來輕鬆地實現 Web Services 的發佈和使用。Apache CXF已是一個正式的Apache頂級項目。CXF支持多種協議,如:SOAP、XML/HTTP、RESTful HTTP 、 CORBA ,而且能夠在多種傳輸協議上運行,好比:HTTP、JMS 、 JBI。CXF能夠與Spring進行無縫集成。CXF 框架是一種基於 Servlet 技術的 SOA 應用開發框架,要正常運行基於 CXF 應用框架開發的企業應用,除了 CXF 框架自己以外,還須要 JDK 和 Servlet 容器的支持。CXF不可是一個優秀的Web Services / SOAP / WSDL 引擎,也是一個不錯的ESB總線,爲SOA的實施提供了一種選擇方案,固然他不是最好的,它僅僅實現了SOA架構的一部分。CXF更注重開發人員的工效(ergonomics)和嵌入能力(embeddability)。大多數均可以經過配置API來完成,替代了比較繁瑣的XML配置文件, Spring的集成性常常的被說起,CXF支持Spring2.0和CXF's API和Spring的配置文件能夠很是好的對應。
注:對於Axis2與CXF之間的關係,一個是Axis2出現的時間較早,而CXF的追趕速度快。
 
以上幾種框架的總結:
a:目前開發Web Service的幾個框架,分別爲Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,這是Java6發佈所提供的對Web Service服務的一種實現。)
b:Axis與XFire已隨着技術不斷的更替慢慢落幕,都已再也不更新。
c:以axis2與cxf所最爲經常使用,目前也只有axis2和cxf官方有更新。
d:從使用場景來講,若是你須要多語言的支持,你應該選擇AXIS2。若是你須要把你的實現側重JAVA並但願和Spring集成,CXF就是更好的選擇。

 

 

轉載於:https://www.cnblogs.com/domi22/p/8060330.htmlapache

相關文章
相關標籤/搜索