簡體   English   中英

Jersey Restful應用程序上的JAXB或Xstream

[英]JAXB or Xstream on a Jersey Restful application

我想知道哪種解決方案更適合Jersey Rest Web服務。 在某些情況下,JAXB無法處理某些類型。 使用XStream更好嗎?

注意:我是EclipseLink JAXB(MOXy)的負責人,也是JAXB(JSR-222)專家組的成員。

我想知道哪種解決方案更適合Jersey Rest Web服務。

JAXB(JSR-222)是JAX-RS的默認綁定層。 這意味着如果您有以下方法,JAXB將自動用於將返回類型( Customer )轉換為XML(以及使用Jersey時的JSON)。

@GET
@Produces(MediaType.APPLICATION_XML)
@Path("{id}")
public Customer read(@PathParam("id") long id) {
    return entityManager.find(Customer.class, id);
}

如果您需要更多地控制JAXBContext,可以使用名為ContextResolver的JAX-RS機制:

在某些情況下,JAXB無法處理某些類型

JAXB能夠處理所有類型,默認情況下或通過使用XmlAdapter 下面是一些示例,其中XmlAdapter與Joda-Time類型和一些不可變域對象一起使用:

使用XStream更好嗎?

下面是我寫的博客條目的鏈接,我使用您可能感興趣的JAXB和XStream將相同的對象模型映射到同一個XML文檔:

諸如MOXy之類的JAXB實現還包含許多有用的擴展,例如基於XPath的映射( @XmlPath )和外部映射文檔:

有關在Jersey中使用MOXy作為JAXB提供程序的示例,請參閱:

取決於您的使用案例 - 如果您認為JAXB將是重大限制,您可以使用XStream。 Btw Jersey最近增加了對MOXy的支持,這可以幫助你克服JDK中JAXB Reference impl中的一些極端情況。

Pro JAXB

  • 開箱即用的功能與澤西島
  • 能夠指定自己的JAXBContext
  • 穩定; Jersey / JAXB團隊提供大量測試/支持

Con JAXB

  • 對於某些極端情況,它不能正常工作(由於這些語言的不同性質,java / xml綁定有局限性)

Pro XStream:

  • 你可能有一些經驗

Con XStream:

  • 你需要在澤西島實現它的支持(MessageBodyReaders / Writers)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM