我想知道哪种解决方案更适合Jersey Rest Web服务。在某些情况下,JAXB无法处理某些类型。使用XStream是否更好?
答案 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
Con JAXB
Pro XStream:
Con XStream: