天天看點

JAX-WS與JAX-RS差別是什麼?

一、名稱 JAX-WS:全稱是JavaTM API forXML-Based Web Services JAX-RS :全稱是 JavaTM API forRESTful Web Services

關于JAX-WS與JAX-RS兩者是 不同風格的SOA架構。前者以動詞為中心,指定的是每次執行函數。而後者以名詞為中心,每次執行的時候指的是資源。

二、JAX-RS是JAVA EE6 引入的一個新技術。 JAX-RS即Java API for RESTful Web Services,是一個Java 程式設計語言的應用程式接口,支援按照表述性狀态轉移(REST)架構風格建立Web服務。 JAX-RS使用了Java SE5引入的Java标注來簡化Web服務的用戶端和服務端的開發和部署。 JAX-WS規範是一組XML web services的JAVA API,JAX-WS允許開發者可以選擇RPC-oriented或者message-oriented 來實作自己的web services。

三、概述 在 JAX-WS中,一個遠端調用可以轉換為一個基于XML的協定例如SOAP,在使用JAX-WS過程中,開發者不需要編寫任何生成和處理SOAP消息的代碼。JAX-WS的運作時實作會将這些API的調用轉換成為對應的SOAP消息。

在伺服器端,使用者隻需要通過Java語言定義遠端調用所需要實作的接口SEI(service endpoint interface),并提供相關的實作,通過調用JAX-WS的服務釋出接口就可以将其釋出為WebService接口。

在用戶端,使用者可以通過JAX-WS的API建立一個代理(用本地對象來替代遠端的服務)來實作對于遠端伺服器端的調用。

當然 JAX-WS 也提供了一組針對底層消息進行操作的API調用,你可以通過Dispatch 直接使用SOAP消息或XML消息發送請求或者使用Provider處理SOAP或XML消息。

通過web service所提供的互操作環境,我們可以用JAX-WS輕松實作JAVA平台與其他程式設計環境(.net等)的互操作。

JAX-WS與JAX-RPC之間的關系

Sun最開始的web services的實作是JAX-RPC 1.1 (JSR 101)。這個實作是基于Java的RPC,并不完全支援schema規範,同時沒有對Binding和Parsing定義标準的實作。

JAX-WS2.0 (JSR 224)是Sun新的web services協定棧,是一個完全基于标準的實作。在binding層,使用的是the Java Architecture for XML Binding (JAXB, JSR 222),在parsing層,使用的是the Streaming API for XML (StAX, JSR 173),同時它還完全支援schema規範。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

JAX-RS提供了一些标注将一個資源類,一個POJO Java類,封裝為Web資源。

标注包括:

@Path,标注資源類或者方法的相對路徑

@GET,@PUT,@POST,@DELETE,标注方法是HTTP請求的類型。

@Produces,标注傳回的MIME媒體類型

@Consumes,标注可接受請求的MIME媒體類型

@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的參數來自于HTTP請求的不同位置,例如@PathParam來自于URL的路徑,@QueryParam來自于URL的查詢參數,@HeaderParam來自于HTTP請求的頭資訊,@CookieParam來自于HTTP請求的Cookie。

基于JAX-RS實作的架構有Jersey,RESTEasy等。這兩個架構建立的應用可以很友善地部署到Servlet 容器中,比如Tomcat,JBoss等。值得一提的是RESTEasy是由JBoss公司開發的,是以将用RESTEasy架構實作的應用部署到JBoss伺服器上,可以實作很多額外的功能。 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

附:cxf 實作兩者的一個demo https://github.com/dogiant/cxf-demo