Jersey Restful 应用程序上的 JAXB 或 Xstream

发布于 2024-12-24 01:11:39 字数 76 浏览 1 评论 0 原文

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

I want to know which solution is better for a Jersey Rest Web service. In some cases JAXB is not able to handle some types. Is it better to use XStream?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

橘和柠 2024-12-31 01:11:39

注意:我是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 文档,您可能会感兴趣:

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

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

Note: I'm the EclipseLink JAXB (MOXy) lead and a member of the JAXB (JSR-222) expert group.

I want to know which solution is better for a Jersey Rest Web service.

JAXB (JSR-222) is the default binding layer for JAX-RS. This means that if you have the following method, JAXB will automatically be used to convert the return type (Customer) to XML (and JSON when using Jersey).

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

If you need more control over your JAXBContext you can use a JAX-RS mechanism called ContextResolver:

In some cases JAXB is not able to handle some types

JAXB is able to handle all types, either by default or through the use of an XmlAdapter. Below are some examples where an XmlAdapter is used with the Joda-Time types and some immutable domain objects:

Is it better to use XStream?

Below is a link to a blog entry I wrote where I mapped the same object model to the same XML document using both JAXB and XStream you may be interested in:

JAXB implementations such as MOXy also contain many extensions you will find useful such as XPath based mapping (@XmlPath) and an external mapping document:

For an example of using MOXy as the JAXB provider in Jersey see:

静赏你的温柔 2024-12-31 01:11:39

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

Pro JAXB

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

Con JAXB

  • 在某些极端情况下无法按预期工作(由于这些语言的不同性质,java/xml 绑定具有限制)

Pro XStream:

  • 经验

您可能有一些Con XStream :

  • 您需要在泽西岛实现对其的支持(MessageBodyReaders/Writers)

Depends on your use case - if you think JAXB will be significant limitation, you can use XStream. Btw Jersey recently added support for MOXy, which could help you overcome some corner cases in JAXB Reference impl in JDK.

Pro JAXB

  • out of the box functionality with Jersey
  • ability to specify own JAXBContext
  • stable; lots of tests / support from Jersey/JAXB team

Con JAXB

  • it doesn't work as expected for some corner cases (java/xml binding has limitations due to different nature of these languages)

Pro XStream:

  • you probably have some experience with that

Con XStream:

  • you'll need implement support for it (MessageBodyReaders/Writers) in Jersey
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文