Java XStream库的现代替代品?贾克斯布 EclipseLink的MOXy XStreamXmlBeans断续器

2022-09-03 08:57:17

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


答案 1

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

贾克斯布

访问 JAXB 项目的站点以查看教程指南。另请查看原始的 JAXB 体系结构白皮书

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

EclipseLinkMOXy

访问EclipseLink项目的网站,阅读这篇关于InfoQ的EclipseLink的介绍性文章,并查看Blaise Doughan关于MOXy的回答

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

XStream

是的,XStream,因为它实际上在2011年进行了更新,自您询问以来进行了重大更新和2个服务版本,因此它似乎维护得很好,并且是成熟项目使用的相当不错的竞争者。不要忘记检查版本1.4.x中的新功能。

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

XmlBeans

访问 XmlBeans 项目的网站

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

断续器

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

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


答案 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社区进程(JCP)开发的标准。有来自XML Bean(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 - 示例
  • 通过 Binder 保留 XML 信息集的选项 - 示例
  • JAX-WS(Web 服务)的绑定层
  • JAX-RS(静止)的绑定层 - 示例
  • 与 JSON 兼容(当与 Jettison 等库一起使用时) - 示例

EclipseLink JAXB (MOXy)

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

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

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

用于处理第三方类的映射文件

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

用于映射 JPA 实体的扩展

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


比较

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


推荐