1. 程式人生 > >java 中 Object XML 互轉,最終選擇Xstream

java 中 Object XML 互轉,最終選擇Xstream

前言

  • spring boot 2.0.0 RELEASE
  • maven 3.5.0
  • 專案中需要進行 Object 與 XML 的互轉。為此嘗試了幾個互轉工具,進行記錄。
  • 耗費了一天的時間,將FasterXML、Caster、JAXB、Xstream都嘗試了一遍。過程很痛苦。記錄一下。
  • 最終選擇Xstream(未評價效能,只是看能不能滿足功能要求。此專案暫無效能要求。)。

FasterXML

  • Jackson可以輕鬆的將Java物件轉換成json物件和xml文件,同樣也可以將json、xml轉換成Java物件。
  • 嘗試版本:jackson-dataformat-xml 2.9.0
  • 專案地址:https://github.com/FasterXML/jackson-dataformat-xml
  • 無複雜要求的 Object 與 XML 的互轉可以勝任,複雜的還是不可以的。具體可以參考 https://github.com/FasterXML/jackson-dataformat-xml 中列出的限制。
  • 如果 Object 與 XML 的互轉受自己控制,可以選擇FasterXML。使用起來挺簡單的。還能支援json格式。
  • 如果 Object 與 XML 的互轉不受自己控制,比如:與外部系統通過xml進行資料互動時,不建議用啊。你也不知道對方會不會來個炫技啥的,出現個識別不了的XML時,還得換工具,比較麻煩,還是防微杜漸吧。

Spring Marshalling XML using O/X Mappers

  • 嘗試版本:Spring 5.0.4.RELEASE
  • Spring提供的 Object 與 XML 的互轉工具。吐槽一下,單獨使用時,真心不好用。或許是未考慮單獨提供出來用。
  • Spring只是統一了介面,具體的實現有:JAXB、Caster、JiBX、Xstream
  • Caster:已經放棄支援了。“Spring Framework 4.3.13, due to the lack of activity on the Castor project”
  • JAXB:與Spring整合後,無法設定NamespacePrefixMapper。
  • JiBX:未嘗試整合。
  • Xstream:未嘗試整合。

JAXB

  • 嘗試版本: JAXB 2.3.0
  • 專案地址:https://github.com/javaee/jaxb-v2
  • 基本上能夠滿足我的要求,用著挺好用。也能跟spring整合。支援註解,註解使用起來方便,註解支援的也多。
  • 唯一缺點:不能將NameSpace的字首設定成空(”“/null)。設定了也無效。(設定成其它的,是有效的)
  • 專案的git倉庫中,示例不少,這點真心不錯。
  • 對於需要將NameSpace的字首設定成空(”“/null)時,放棄它吧。(花了半天時間,檢索了大量的文章,也沒能解決此事)

Xstream

  • 嘗試版本: xstream 1.4.10
  • 專案主頁:https://x-stream.github.io/index.html
  • 支援註解。
  • 支援List/Map。
  • 能夠設定NameSpace的字首設定成空(”“/null)。
  • 能與Spring整合,也可以單獨使用。