Java XStream库的现代替代品?

我多年前使用过XStream,但我发现自2008年以来这些库没有更新( 最新消息 )。 现在是否有更现代化和最新的Java XML序列化库?

按照偏好,相关性和活动的顺序:

JAXB

访问JAXB项目的站点以查看教程和指南 。 还可以查看原始的JAXB架构白皮书 。

上面列出的JAXB项目是API的参考实现,由GlassFish Application Server打包。

EclipseLink的MOXy

访问EclipseLink项目的网站 ,阅读InfoQ上关于EclipseLink的介绍性文章 ,并参阅Blaise Doughan关于MOXy的回答 。

EclipseLink源自Oracle的TopLink ,现在是开源的,由Eclipse Foundation管理,并在许多基于Eclipse的产品中使用。

XStream的

是的, XStream ,因为它实际上已经在2011年更新了,因为您提出了重大更新和2个服务版本 ,所以它看起来维护得很好,并且是成熟项目使用的相当好的竞争者。 不要忘记检查版本1.4.x中的新function。

访问XStream项目的站点及其教程进行比较。

XmlBeans的

访问XmlBeans项目的站点 。

XmlBeans是一个经过良好测试的项目,已经存在了一段时间。

的JiBX

访问JiBX项目的网站 ,按照教程和指南进行操作 。

如果你不喜欢XmlBeans甚至JAXB的复杂性,JiBX可能是一个更简单的选择。

注意:我是EclipseLink JAXB(MOXy)的负责人,也是JAXB( JSR-222 )专家组的成员。

在选择软件时考虑库的发布频率是正确的。 新产品发布的原因有很多:

  • 客户请求 – 无论您的图书馆有多好,您的用户群都会有改进建议和function请求。
  • 行业发展 – 模块化部署目前是热门话题,在过去几年中,必须对EclipseLink进行更改,以使其与OSGi兼容。
  • 新的Java版本 – Java SE 7即将发布,而这并不需要我们在即将发布的版本中进行一些调整以确保我们兼容的版本。 此外,随着时间的推移,将添加更多function以利用新的Java方面(EclipseLink至少需要Java SE 5)。

评估任何开源项目的另一个重要方面是活动提交者的数量。 像ohloh.net这样的网站对此非常有用:


JAXB(JSR-222)

JAXB不仅仅是一个实现,它是通过Java Community Process(JCP)开发的标准。 来自XML Beans(BEA),EMF(IBM),TopLink(Oracle)等对象到XML的参与者都有参与者。因为JAXB是Java EE的一部分,所以它可以在每个应用服务器中使用:WebLogic,GlassFish, WebSphere,JBoss等

JAXB提供:

  • 100%架构覆盖率
  • 多种实现: Metro , EclipseLink MOXy , Apache JaxMe等
  • 包含在Java SE 6中,与JDK 1.5兼容
  • 能够从XML模式或Java类开始
  • 各种扩展机制包括XmlAdapter – 示例
  • 通过Binder保留XML信息集的选项 – 示例
  • JAX-WS的绑定层(Web服务)
  • JAX-RS(Rest)的绑定层 – 示例
  • 兼容JSON(与Jettison等库一起使用时) – 示例

EclipseLink JAXB(MOXy)

MOXy是一个JAXB实现,提供了许多有用的扩展,包括:

利用XPath实现真正的对象到XML映射

基于XPath的映射允许您从Java类和XML模式开始,并将两者映射在一起。

映射文件以处理第三方类

在当前的JAXB规范中,元数据是通过注释提供的。 与无法修改的第三方类一起使用可能会有问题。 这就是为什么MOXy提供了一种通过XML指定映射的方法:

映射JPA实体的扩展

通常,您需要对Java对象执行更多操作,然后再映射到XML。 您可能还需要将它们保存到数据库中。 这意味着您的对象模型可能需要考虑其他附加约束。 MOXy为这种用例提供​​了许多扩展:


比较

下面是我将JAXB与XStream和Simple进行比较的几个比较:

有些东西没有更新3年的事实并不意味着它已经过时了。 它可能只是意味着没有必要更新它。 如果不需要更改项目,为什么要更改它?

对于明显缺乏“进展”的另一个解释是,更改库API往往会对依赖于它们的项目造成破坏。 对于将大量第三方组件和库组合到一个Java应用程序中的项目,这尤其成问题。


寻找图书馆的替代方案是一件好事,但仅仅这样做因为图书馆最近没有更新过。 如果XStream能够满足您的需求,请坚持下去。 较新并不一定意味着更好。

XStream非常好,它的工作做得很好。 即使对于最近的项目,我更喜欢将XStream用于适合的用例,因为它易于使用,轻巧且性能非常好。

如果您正在查看一些严肃的bean绑定工作,请查看Simple Framework。 它也是一个很好的工具。 这帮助我在一个项目中,我需要做一些严肃的自定义映射工作与注释。 http://simple.sourceforge.net/

XStream 1.4.6于2013年12月发布,随着Java 8的改进,因此自2008年以来该库已更新。