Jersey Restful 应用程序上的 JAXB 或 Xstream
我想知道哪种解决方案更适合 Jersey Rest Web 服务。在某些情况下,JAXB 无法处理某些类型。使用 XStream 更好吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我想知道哪种解决方案更适合 Jersey Rest Web 服务。在某些情况下,JAXB 无法处理某些类型。使用 XStream 更好吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
注意:我是EclipseLink JAXB (MOXy) 的领导者和 JAXB 的成员(JSR-222)专家组。
JAXB (JSR-222) 是 JAX-RS 的默认绑定层。这意味着,如果您有以下方法,JAXB 将自动用于将返回类型 (
Customer
) 转换为 XML(使用 Jersey 时为 JSON)。如果您需要对 JAXBContext 进行更多控制,可以使用名为 ContextResolver 的 JAX-RS 机制:
JAXB 能够处理所有类型(默认情况下或通过使用
XmlAdapter
)。以下是XmlAdapter
与 Joda-Time 类型和一些不可变域对象一起使用的一些示例:下面是我写的博客文章的链接,其中我使用 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.
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).If you need more control over your JAXBContext you can use a JAX-RS mechanism called
ContextResolver
:JAXB is able to handle all types, either by default or through the use of an
XmlAdapter
. Below are some examples where anXmlAdapter
is used with the Joda-Time types and some immutable domain objects: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:
取决于您的用例 - 如果您认为 JAXB 将是重大限制,您可以使用 XStream。 Btw Jersey 最近添加了对 MOXy 的支持,这可以帮助您克服 JDK 中的 JAXB Reference impl 中的一些极端情况。
Pro JAXB
Con JAXB
Pro XStream:
您可能有一些Con XStream :
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
Con JAXB
Pro XStream:
Con XStream: