Java XStream库的现代替代品?

Eli*_*der 15 java xml xstream

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

hay*_*lem 23

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

JAXB

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

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

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可能是一个更简单的选择.


bdo*_*han 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 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进行比较的几个比较:


Ste*_*n C 8

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

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


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