【问题标题】:Modern alternative to Java XStream library?Java XStream 库的现代替代品?
【发布时间】:2011-09-03 18:45:48
【问题描述】:

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

【问题讨论】:

  • 截至 2011 年 8 月,XStream 刚刚拥有它的 first major update in 3 years。这种发展速度似乎很合适,因为正如其他答案所解释的那样,XStream 是一个成熟的项目。
  • 事实上,更新还在继续:“2014 年 2 月 8 日 XStream 1.4.7 发布”。
  • 您现在可以从 Github 获取 XStream,文档已发布在 github.io 上。在这个时间点,图书馆没有得到维护/更新的“理论”被彻底揭穿了。
  • 2021,它仍然对我有用。许多用例。我不确定它有多快。

标签: java xml xstream


【解决方案1】:

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

JAXB

访问JAXB project's site 查看tutorialguide。 也可以看看原来的JAXB architecture whitepaper

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

EclipseLink's MOXy

访问EclipseLink project's site 并阅读此introductory article to EclipseLink on InfoQ,并查看Blaise Doughan's answer about MOXy

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

XStream

是的,XStream,因为自从你问到它实际上是updated in 2011 with a major update and 2 service releases,所以它看起来维护得很好,并且是mature projects 使用的一个很好的竞争者。不要忘记查看version 1.4.x 中的新内容。

访问XStream project's site 及其tutorial 进行比较。

XmlBeans

访问XmlBeans project's site

XmlBeans 是一个久经考验的项目。

JiBX

访问JiBX project's site,关注tutorialguide

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

【讨论】:

  • +1 用于 JAXB。另一方面,XMLBeans 自 2008 年 7 月以来一直没有发布,这使其在 OP 方面与 XStream 处于相似的位置:xmlbeans.apache.org/sourceAndBinaries/index.html
  • @Blaise:是的,我知道。但我有很好的经验。另外,正如 Steven C. 在另一个回答中提到的,它已经过时的事实并不总是意味着它很糟糕。也许这意味着不需要新版本就足够了,尽管我通常会对此持怀疑态度。
  • @Blaise:但实际上,我意识到我忘记了我也喜欢的 EclipseLink,它被用于许多基于 Eclipse 的解决方案(和其他)中,并且正在积极开发中。所以我也会把它评为 XmlBeans 以上。
  • @Blaise:哎呀,实际上甚至没有注意到你的答案。那我直接把你的功劳归功于你。
【解决方案2】:

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

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

  • 客户请求 - 无论您的库有多好,您的用户群都会有改进建议和功能请求。
  • 行业发展 - 模块化部署现在是热门话题,在过去几年中,必须对 EclipseLink 进行更改以使其与 OSGi 兼容。
  • 新的 Java 版本 - Java SE 7 即将发布,虽然这并不一定要发布,但我们确实需要在即将发布的版本中进行一些调整以确保我们兼容。此外,随着时间的推移,将添加更多功能以利用新的 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% 架构覆盖率
  • 多个实现:MetroEclipseLink MOXyApache JaxMe
  • 包含在 Java SE 6 中,与 JDK 1.5 兼容
  • 能够从 XML 模式或 Java 类开始
  • 各种扩展机制,包括 XmlAdapter - Example
  • 通过 Binder 保留 XML 信息集的选项 - Example
  • JAX-WS(Web 服务)的绑定层
  • JAX-RS (Rest) 的绑定层 - Example
  • 与 JSON 兼容(与 Jettison 等库一起使用时)-Example

EclipseLink JAXB (MOXy)

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

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

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

用于处理 3rd 方类的映射文件

在当前的 JAXB 规范中,元数据是通过注释提供的。与无法修改的 3rd 方类一起使用可能会出现问题。这就是 MOXy 提供一种通过 XML 指定映射的方法的原因:

映射 JPA 实体的扩展

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


比较

以下是我对 JAXB 与 XStream 和 Simple 进行的一些比较:

【讨论】:

【解决方案3】:

3 年未更新的事实并不意味着它已过时。这可能只是意味着没有需要更新它。如果不需要改变一个项目,为什么要改变它?

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


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


更新 - 2019 年

自 2011 年以来,XStream 每年至少收到一次新版本的更新。有关详细信息,请参阅Changes 页面,并查看Github repository 上的项目活动。到目前为止,XStream 没有得到维护的理论(IMO)被彻底揭穿了。

【讨论】:

    【解决方案4】:

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

    如果您正在研究一些严肃的 bean 绑定工作,请查看 Simple Framework。这也是一个很好的工具。这帮助我完成了一个项目,在该项目中我需要使用注释进行一些严肃的自定义映射工作。 http://simple.sourceforge.net/

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-26
          • 2016-05-25
          • 2012-02-28
          • 2010-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多