Java XStream库的现代替代品是什么?

16

我多年前使用过XStream,但我发现自2008年后该库就没有更新了(最新消息)。现在有没有更现代化和更新的Java XML序列化库呢?

答案:
我多年前使用过 XStream 库,但是我发现它自2008年以来就没有更新了(最新消息)。 现在有更现代化和更新的 Java XML 序列化库吗?

2
截至2011年8月,XStream刚刚进行了3年来的首次重大更新。由于XStream是一个成熟的项目,因此这种开发速度似乎是适当的,正如其他答案所解释的那样。 - Justin Emery
更新仍在继续:“2014年2月8日发布了XStream 1.4.7”。 - Stephen C
您现在可以从Github获取XStream,并且文档已经发布在github.io上。目前,“理论”认为该库未得到维护/更新已被彻底驳斥。 - Stephen C
2021年,对我仍然有效。有许多使用情况。但我不确定它的速度有多快。 - mjs
6个回答

23

按照优先级、相关性和活动顺序:

JAXB

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

上述JAXB项目是API的参考实现,并由GlassFish应用服务器打包。

EclipseLinkMOXy

访问EclipseLink项目网站并阅读这篇在InfoQ上介绍EclipseLink的文章,还可以查看Blaise Doughan关于MOXy的答案

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

XStream

是的,XStream,因为它实际上已经在2011年进行了重大更新和2个服务发布,所以它看起来维护得很好,是一个被成熟项目使用的不错的竞争者。别忘了查看版本1.4.x中的新内容。

请访问XStream项目网站和其教程进行比较。

XmlBeans

请访问XmlBeans项目网站

XmlBeans是一个经过充分测试且存在一段时间的项目。

JiBX

访问JiBX项目网站,跟随教程指南

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


+1 对于JAXB。另一方面,XMLBeans自2008年7月以来就没有发布过,这使它与XStream一样,就OP而言处于类似的位置:http://xmlbeans.apache.org/sourceAndBinaries/index.html。 - bdoughan
1
@Blaise:没错,我知道。但是我用它的经验很好。而且,正如Steven C.在另一个答案中提到的那样,过时并不总意味着不好。也许这意味着它已经足够好,不需要新版本,尽管我通常会对此持怀疑态度。 - haylem
@Blaise:但实际上,我意识到我忘记了EclipseLink,它也很好用,并且在许多基于Eclipse的解决方案(以及其他解决方案)中被广泛使用,并且正在积极开发。因此,我认为它比XmlBeans更好。 - haylem
@Blaise:哎呀,我甚至没有注意到你的答案。实际上,我会直接给你贡献。 - haylem

10
某件事情三年没有更新并不意味着它已经过时。这可能只是因为没有需要更新的原因。如果没有必要改变一个项目,为什么要改变呢?
另一个可能的解释是,改变库的API对依赖它们的项目来说往往是具有破坏性的。这对于将许多第三方组件和库合并到一个Java应用程序中的项目尤其成问题。
寻找替代库可能是一个好主意,特别是如果你需要现有库没有提供的功能。但仅仅因为库最近没有更新就寻找替代品是不明智的。如果XStream能满足你的需求,就坚持使用它。新不一定意味着更好。

1 - ... 当问题最初被提出时。


更新 - 2023年

自2011年以来,XStream每年至少发布一次更新。请参考更改页面了解详细信息,并查看项目的Github存储库上的活动。目前,关于XStream未得到维护的理论已经(依我之见)彻底被驳斥


10

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

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

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

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


JAXB (JSR-222)

JAXB不仅是一种实现,它还是通过Java社区流程(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进行了比较:


这里使用XStream没有问题,但是使用JAXB和Hessian会遇到很多问题。JAXB无法像XStream一样进行反序列化。请参见https://stackoverflow.com/questions/68454607/jboss-river-serialization-library-java-lang-negativearraysizeexception-on-certa。 - mjs

4
XStream非常好用,它的工作表现也很出色。即使在最近的项目中,我仍然喜欢使用XStream,因为它易于使用、轻量级且性能非常好。
如果你正在考虑一些严肃的bean-binding工作,请看看Simple Framework。这也是一个很好的工具。在一个项目中,我需要使用注释进行一些严重的自定义映射工作时,Simple Framework帮了我大忙。 http://simple.sourceforge.net/

0

Underscore-java 可以读写 XML 文件。我是该项目的维护者。支持 Java 11+。


0

XStream 1.4.6于2013年12月发布,具有Java 8的改进功能,因此该库自2008年以来已经更新。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接