很多年前我使用过XStream,但是我发现这些库自2008年以来没有更新(latest news)。现在是否有更现代且最新的Java XML序列化库?Java XStream库的现代替代品?
回答
在优选方案,相关性和活动的顺序:
JAXB
参观JAXB project's site检查出tutorial和guide。 也看看原来的JAXB architecture whitepaper。
上面列出的JAXB项目是API的参考实现,并由GlassFish应用服务器打包。
EclipseLink的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是一个久经考验的项目,已经有一段时间了。
JiBX
参观JiBX project's site,按照tutorial和guide。
如果您不喜欢XmlBeans或JAXB的复杂性,JiBX可能会更简单一些。
JAXB的+1。另一方面,XMLBeans自2008年7月以来尚未发布,就OP而言,它与XStream类似。http://xmlbeans.apache.org/sourceAndBinaries/index.html – 2011-05-28 10:58:46
@Blaise:True,我知道。但我对它有很好的体验。另外,正如Steven C.的另一个答案中提到的那样,事实上它已经过时并不总是意味着它很糟糕。也许这意味着它不需要新版本就足够了,尽管我通常会对此感到怀疑。 – haylem 2011-05-28 11:02:14
@Blaise:但实际上,我意识到我忘记了EclipseLink,我也喜欢它,并且在很多基于Eclipse的解决方案(以及其他)中使用,并且正在积极开发。所以我也会评估XmlBeans。 – haylem 2011-05-28 11:10:11
3年未更新的事实并不意味着它已过时。这可能仅表示没有需要来更新它。如果不需要更改项目,为什么要改变它?
显然缺乏“进步”的另一个解释是,更改图书馆API往往会对依赖于它们的项目造成破坏。对于将大量第三方组件和库组合到一个Java应用程序中的项目而言,这尤其成问题。
寻找一个图书馆的替代品是一件好事,但只是这样做,因为图书馆最近没有更新是不是。如果XStream能够满足您的需求,请坚持使用它。较新的并不一定意味着更好。
XStream非常好,它的工作很好。即使对于最近的项目,我也更喜欢使用XStream来适用它,因为它易于使用,轻量级且性能非常好。
如果您正在查看一些严重的绑定bean的工作,请参阅Simple Framework。这也是一个很好的工具。这帮了我一个项目,我需要做一些认真的自定义贴图工作。 http://simple.sourceforge.net/
注:我是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%覆盖率的模式
- 多种实现:Metro,EclipseLink MOXy,Apache JaxMe等
- 包含在Java SE 6,与JDK 1兼容。5
- 能够从XML架构或Java类开始
- 各种扩展机制,包括XmlAdapter - Example
- 选项通过活页夹来保存XML信息集 - Example
- 为JAX-WS绑定层(Web服务) 为JAX-RS
- 结合层(垫) - Example
的EclipseLink JAXB(莫西)
MOXY是JAXB实现,提供了许多实用的扩展功能,包括:
真正的对象到XML映射通过利用XPath的
基于XPath的映射允许您从Java类和XML模式开始,并将它们映射到一起。
- http://bdoughan.blogspot.com/2010/09/xpath-based-mapping-geocode-example.html
- http://bdoughan.blogspot.com/2011/03/map-to-element-based-on-attribute-value.html
映射文件用于处理第三方类
在当前JAXB规范中的元数据通过注解提供。对于无法修改的第三方类使用这可能会有问题。这就是为什么莫西提供了一种方法通过XML指定映射:用于映射JPA实体
- http://bdoughan.blogspot.com/2010/12/extending-jaxb-representing-annotations.html
- http://bdoughan.blogspot.com/2011/04/moxys-xml-metadata-in-jax-rs-service.html
扩展
很多时候,你需要做的更多与您的Java对象,然后只是映射到XML。您可能还需要将它们保存到数据库中。这意味着您的对象模型可能会有其他约束条件,您需要考虑。莫西提供了一些扩展对于这种使用案例:
- http://bdoughan.blogspot.com/2010/07/jpa-entities-to-xml-bidirectional.html
- http://wiki.eclipse.org/EclipseLink/Examples/MOXy/JPA
比较
下面是几个比较我已经做了比较JAXB到XStream和Simple:
不错的答案布莱斯;) – 2011-05-28 11:16:54
的XStream 1.4.6发布于2013年12月,与Java 8倍的改进,所以该库已更新2008年以来
- 1. 转到Java的替代品?
- 2. java上的替代品android
- 3. 现代web开发的cookie替代品?
- 4. ImageMagick - Rmagick库的替代品?
- 5. Java MIDI Sequencer替代品
- 6. JML替代品
- 7. Portlets的替代品
- 8. javax.comm的替代品
- 9. JMegahal的替代品
- 10. @“”的替代品?
- 11. QI4J替代品
- 12. CKAN的替代品
- 13. Java BigDecimal替代库
- 14. ASIHTTP的最佳替代品,替代品或替代品用于下载队列
- 15. PRISM替代品
- 16. Nabaztag替代品?
- 17. Sharepoint替代品?
- 18. OPENDATASOURCE替代品
- 19. window.opener替代品
- 20. XAML替代品
- 21. NAnt替代品
- 22. Kibana替代品
- 23. 替代corba的好替代品
- 24. eval()的替代品
- 25. SRSPlus的替代品?
- 26. SharePoint的替代品?
- 27. NHIbernate的替代品?
- 28. Essbase的替代品
- 29. Flash的替代品?
- 30. java.util.concurrent.ConcurrentSkipListSet的替代品
截至2011年8月,XStream的刚这是[3年来的第一次重大更新](http://xstream.codehaus.org/news.html#1.4)。这种发展速度似乎是合适的,因为正如其他答案所解释的那样,XStream是一个成熟的项目。 – 2013-04-09 22:12:23
事实上,更新继续:“2014年2月8日发布XStream 1.4.7”。 – 2015-01-29 22:32:02