Jersey Restful应用程序上的JAXB或Xstream

时间:2012-01-04 08:20:09

标签: jaxb jersey xstream

我想知道哪种解决方案更适合Jersey Rest Web服务。在某些情况下,JAXB无法处理某些类型。使用XStream是否更好?

2 个答案:

答案 0 :(得分:8)

注意:我是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提供程序的示例,请参阅:

答案 1 :(得分:3)

取决于您的使用案例 - 如果您认为JAXB将是重大限制,您可以使用XStream。 Btw Jersey最近增加了对MOXy的支持,这可以帮助你克服JDK中JAXB Reference impl中的一些极端情况。

Pro JAXB

  • 泽西岛开箱即用的功能
  • 指定自己的JAXBContext的能力
  • 稳定;来自Jersey / JAXB团队的大量测试/支持

Con JAXB

  • 对于某些极端情况(由于这些语言的不同性质,java / xml绑定具有限制),它无法正常工作。

Pro XStream:

  • 您可能对此有一些经验

Con XStream:

  • 您需要在Jersey
  • 中实现对它的支持(MessageBodyReaders / Writers)