webservice 理論知識(一)

一.webservice

webservice是一種跨操作系統和跨語言的數據調用,數據交換的一種服務技術

所謂跨編程語言和跨操作平臺,就是說服務端程序採用java編寫,客戶端程序則可以採用其他編程語言編寫,反之亦然。

跨操作系統平臺則是指服務端程序和客戶端程序可以在不同的操作系統上運行。

遠程調用,就是一臺計算機的應用可以調用其他計算機上的應用。例如:支付寶,支付寶並沒有銀行卡等數據,它只是去調用銀行提供的接口來獲得數據。還有天氣預報等,也是氣象局把自己的系統服務以webservice服務的形式暴露出來,讓第三方網站和程序可以調用這些服務功能

使用3種規範:JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS

使用的3要素: SOAP,WSLD,UUID

1.webservice開發的3種規範

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。JAX-WS(JSR 224)規範的API 位於javax.xml.ws.*包,其中大部分都是註解,提供API 操作Web 服務(通常在客戶端使用的較多,由於客戶端可以藉助SDK 生成,因此這個包中的API 我們較少會直接使用)。

(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,目前版本爲1.3。

(3.)JAX-RS:

JAX-RS 是JAVA 針對REST(RepresentationState 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 CXF

2.2 的發行包中的jar 你如果直接全部放到lib 目錄,那麼你必須使用JDK1.6,否則會報

JAX-WS 版本不一致的問題。對於JAXM&SAAJ 規範我們採用JDK 中自帶的默認實現。

2 SOAP 協議

(1) SOAP即簡單對象訪問協議(Simple Object Access Protocol),它是用於交換XML(標準通用標記語言下的一個子集)編碼信息的輕量級協議。它有三個主要方面:XML-envelope爲描述信息內容和如何處理內容定義了框架,將程序對象編碼成爲XML對象的規則,執行遠程過程調用(RPC)的約定。SOAP可以運行在任何其他傳輸協議上。

(2) SOAP作爲一個基於XML語言的協議用於有網上傳輸數據。

(3) SOAP = 在HTTP的基礎上+XML數據。

(4) SOAP是基於HTTP的。

(5) SOAP的組成如下

a) Envelope – 必須的部分。以XML的根元素出現。

b) Headers – 可選的。

c) Body – 必須的。在body部分,包含要執行的服務器的方法。和發送到服務器的數據。

3 wsdl說明書

Web Service描述語言WSDL(SebService Definition Language)就是用機器能閱讀的方式提供的一個正式描述文檔而基於XML(標準通用標記語言下的一個子集)的語言,用於描述Web Service及其函數、參數和返回值。因爲是基於XML的,所以WSDL既是機器可閱讀的,又是人可閱讀的。

wsdl說明書:

wsdl說明書,

 1) 通過wsdl說明書,就可以描述webservice服務端對外發布的服務;

2) wsdl說明書是一個基於xml文件,通過xml語言描述整個服務;

 3) 在wsdl說明中,描述了:

Service:相關端口的集合,包括其關聯的接口、操作、消息等。

Binding:特定端口類型的具體協議和數據格式規範

portType: 服務端點,描述 web service可被執行的操作方法,以及相關的消息,通過binding指向portType

message: 定義一個操作(方法)的數據參數

types: 定義 web service 使用的全部數據類型

閱讀方式

WSDL文檔應該從下往上閱讀。

1.先看service標籤,看相應port的binding屬性,然後通過值查找上面的binding標籤。

2.通過binding標籤可以獲得具體協議等信息,然後查看binding的type屬性

3.通過binding的type屬性,查找對應的portType,可以獲得可操作的方法和參數、返回值等。

4.通過portType下的operation標籤的message屬性,可以向上查找message獲取具體的數據參數信息。

4 UDDI

Web 服務提供商又如何將自己開發的 Web 服務公佈到因特網上,

這就需要使用到 UDDI 了,UDDI的話,是一個跨產業,跨平臺的開放性架構,可以幫助 Web 服務提供商在互聯網上發佈 Web 服務的信息。

UDDI 是一種目錄服務,企業可以通過 UDDI 來註冊和搜索 Web 服務。

簡單來時候話,UDDI 就是一個目錄,只不過在這個目錄中存放的是一些關於 Web 服務的信息而已。

並且 UDDI 通過SOAP 進行通訊,構建於 . Net 之上。

UDDI 即 Universal Description,Discovery andIntegration,也就是通用的描述,發現以及整合。

UDDI 的目的是爲電子商務建立標準;UDDI是一套基於Web的、分佈式的、爲WebService提供的、信息註冊中心的實現標準規範,同時也包含一組使企業能將自身提供的Web Service註冊,以使別的企業能夠發現的訪問協議的實現標準。

二.Apache CXF框架介紹

1 關於 Apache CXF

Apache CXF = Celtix + XFire,ApacheCXF 的前身叫 Apache CeltiXfire,現在已經正式更名爲 Apache CXF 了,以下簡稱爲 CXF。CXF 繼承了 Celtix 和XFire 兩大開源項目的精華,提供了對 JAX-WS 全面的支持,並且提供了多種 Binding 、DataBinding、Transport 以及各種 Format 的支持,並且可以根據實際項目的需要,採用代碼優先(Code First)或者 WSDL 優先(WSDL First)來輕鬆地實現 Web Services 的發佈和使用。目前它仍只是 Apache 的一個孵化項目。

Apache CXF 是一個開源的 Services 框架,CXF 幫助您利用 Frontend 編程 API 來構建和開發 Services ,像 JAX-WS 。這些 Services 可以支持多種協議,比如:SOAP、XML/HTTP、RESTfulHTTP 或者 CORBA ,並且可以在多種傳輸協議上運行,比如:HTTP、JMS 或者 JBI,CXF 大大簡化了 Services 的創建,同時它繼承了 XFire 傳統,一樣可以天然地和 Spring 進行無縫集成。

3.2 功能特性

CXF 包含了大量的功能特性,但是主要集中在以下幾個方面:

(1) 支持 Web Services 標準:CXF 支持多種 Web Services 標準,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。

(2) Frontends:CXF 支持多種“Frontend”編程模型,CXF 實現了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一個“simple frontend”允許客戶端和 EndPoint 的創建,而不需要 Annotation 註解。CXF 既支持 WSDL 優先開發,也支持從 Java 的代碼優先開發模式。

(3) 容易使用: CXF 設計得更加直觀與容易使用。有大量簡單的 API 用來快速地構建代碼優先的 Services,各種 Maven 的插件也使集成更加容易,支持 JAX-WS API ,支持 Spring 2.0 更加簡化的 XML 配置方式,等等。

(4) 支持二進制和遺留協議:CXF 的設計是一種可插撥的架構,既可以支持 XML ,也可以支持非 XML 的類型綁定,比如:JSON 和 CORBA。

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章