Jersey Restful应用程序上的JAXB或Xstream

Jersey Restful应用程序上的JAXB或Xstream,jaxb,jersey,xstream,Jaxb,Jersey,Xstream,我想知道哪种解决方案更适合Jersey Rest Web服务。在某些情况下,JAXB无法处理某些类型。使用XStream更好吗?取决于您的用例-如果您认为JAXB将是一个重要的限制,那么您可以使用XStream。顺便说一句,Jersey最近增加了对MOXy的支持,这可以帮助您克服JDK中JAXB引用impl中的一些困境 Pro JAXB 球衣的开箱即用功能 能够指定自己的JAXBContext 稳定;Jersey/JAXB团队的大量测试/支持 Con JAXB 在某些特殊情况下,它不能像预

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

取决于您的用例-如果您认为JAXB将是一个重要的限制,那么您可以使用XStream。顺便说一句,Jersey最近增加了对MOXy的支持,这可以帮助您克服JDK中JAXB引用impl中的一些困境

Pro JAXB

  • 球衣的开箱即用功能
  • 能够指定自己的JAXBContext
  • 稳定;Jersey/JAXB团队的大量测试/支持
Con JAXB

  • 在某些特殊情况下,它不能像预期的那样工作(由于这些语言的不同性质,java/xml绑定具有局限性)
ProxStream:

  • 你可能对此有一些经验
Con XStream:

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

注意:我是专家组的负责人和成员

我想知道哪种解决方案更适合Jersey Rest Web服务

JAXB(JSR-222)是JAX-RS的默认绑定层。这意味着如果您有以下方法,JAXB将自动用于将返回类型(
Customer
)转换为XML(以及使用Jersey时的JSON)

如果您需要对JAXBContext进行更多控制,可以使用名为
ContextResolver
的JAX-RS机制:

在某些情况下,JAXB无法处理某些类型

JAXB能够处理所有类型,默认情况下或通过使用
XmlAdapter
。下面是一些示例,其中
XmlAdapter
与Joda时间类型和一些不可变域对象一起使用:

使用XStream更好吗

下面是我写的一篇博客文章的链接,其中我使用您可能感兴趣的JAXB和XStream将相同的对象模型映射到相同的XML文档:

MOXy等JAXB实现还包含许多有用的扩展,如基于XPath的映射(
@XmlPath
)和外部映射文档:

有关在Jersey中使用MOXy作为JAXB提供程序的示例,请参见:


+1表示MOXy。Jersey宣布增加了对MOXy的支持,这意味着他们现在在测试套件中使用MOXy。由于MOXy是一个标准的JAXB提供程序,您也可以在GlassFish的早期版本中使用它。有关将MOXy与GlassFish 3.0.1结合使用的示例,请参阅:感谢您提供详细的解释和参考链接。我会试试MOXy,希望它是正确的工具。@Lahniep-如果你需要MOXy的帮助,可以通过我的博客联系我:
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("{id}")
public Customer read(@PathParam("id") long id) {
    return entityManager.find(Customer.class, id);
}