2013-07-31 51 views
13

對不起,這個直率的問題。但許多人一天到晚都在使用這兩個術語,但我不知道。我對此做了一些研究,並且知道它是什麼。但不明白它是如何相關的。我會先分享我對這兩個人的理解。什麼是JAXB和JAXRS?他們有什麼關係?

JAXB是XML至Java綁定技術,可以轉換 模式和Java對象之間以及XML實例文檔 和Java對象實例之間。內部JAXB在xml和java之間執行所有這些轉換 。這是一個xml解析器,然後它知道xml中的組件對應於java中的內容,並且它會中斷。從JAXB這個答案的 轉換是由像XJC(或 codgen插件)工具來完成。映射可以是像

的xsd:串java.lang.String中

的xsd:整數java.math.BigInteger中

JAXRS是不同的。這是處理 請求的一組規範。這意味着,它說「GET(」/foo「的)」是指處理得到 電話與網址/ foo中。它只是說明。它是如何完成的?是的,那 被稱爲本規範的實施。有幾個 實現像restlet,resteasy,球衣,apache cxf等。 這是模擬邏輯和你在數學中實現的方式。算法思想是桶搜索。這可以以任何方式實現。 Java術語JAXRS是接口和這些4的Restlet,RestEasy的, 球衣,apache的CXF是接口的實現。

現在請說,如果我的理解是正確的。然後說出他們是如何相關的。請幫忙 。如果可能的話,圖解說明會更有幫助。

回答

14

你的理解基本上是正確的。 JAXB和JAX-RS都是具有多種實現的Java Community Process(JCP)標準。

JAXB - 定義用於將Java域對象轉換爲/從XML轉換爲XML的標準化元數據和運行時API。

JAX-RS - 定義用於創建RESTful服務的標準化元數據和運行時API。默認情況下,媒體類型爲application/xml JAX-RS將使用JAXB將對象轉換爲XML。

在當執行GET操作JAX-RS執行將返回一個Customer下面的例子。將使用JAXB impl將Customer的實例轉換爲客戶端將實際接收的XML。

package org.example.service; 

import javax.ejb.*; 
import javax.ws.rs.*; 
import javax.ws.rs.core.MediaType; 
import org.example.model.*; 

@Stateless 
@LocalBean 
@Path("/customers") 
public class CustomerResource { 

    @GET 
    @Produces(MediaType.APPLICATION_XML) 
    @Path("{id}") 
    public Customer read(@PathParam("id") int id) { 
     Customer customer = new Customer(); 
     customer.setId(id); 
     customer.setFirstName("Jane"); 
     customer.setLastName(null); 

     PhoneNumber pn = new PhoneNumber(); 
     pn.setType("work"); 
     pn.setValue("5551111"); 
     customer.getPhoneNumbers().add(pn); 

     return customer; 
    } 

} 
+0

非常感謝你。但我有兩個問題。 1)您的意思是「默認爲應用程序/ xml媒體類型JAX-RS將使用JAXB」。那麼其他媒體類型會發生什麼。 2)你引用的例子強調什麼?請澄清。 –

+0

Ya在評論1中的第二個問題被清除了。但是在上面的示例中,您會說「JAXB impl將用於將客戶實例轉換爲XML」。這段代碼是內部代碼還是代碼片段本身?如果在例子中你能告訴行號? –

+0

您可以通過提供自定義的'MessageBodyReader' /'MessageBodyWriter'來覆蓋'application/xml'的默認處理。對於其依賴的其他媒體類型。 'application/json'媒體類型很流行,但JAX-RS沒有定義默認綁定應該是什麼,實現已經有了自己的默認設置。下面是一個例子:http://blog.bdoughan.com/2013/07/oracle-weblogic-1212-now-with.html –

相關問題