很多年前我使用過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