Jersey Restful应用程序上的JAXB或Xstream

Lah*_*iep 2 xstream jaxb jersey

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

bdo*_*han 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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

使用XStream更好吗?

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

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

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