2015-02-11 220 views
0

我正在爲我的應用程序編寫一組REST API以XML和JSON內容類型。我想在設計和實現這些API時,對XML/JSON處理庫做出明智的選擇。以下是對API的各種非功能要求:XML/JSON處理

  1. 性能 - API處理大量數據(有效負載可能以兆字節爲單位)。與API輸出相比,API輸入大小更少。
  2. 過濾功能 - API的調用者應該能夠指定過濾條件,根據該過濾條件修剪輸出以優化帶寬消耗。

作爲我們研究和分析的一部分,我們確實瞭解了DOM API和JAXB/Jackson API。考慮到上面列出的非功能性要求,請求您就選擇正確的API提出建議/建議。

這是我對編組&使用這些API的非編組過程的理解。如果我錯了,請糾正我。

  • DOM的API - 2點步驟的過程(使用DOM解析器&的XMLSerializer)
    XML/JSON來DOM來POJO & POJO到DOM到XML/JSON
  • JAXB的API - 單步工藝(使用註釋)
    XML/JSON到POJO & POJO到XML/JSON

雖然JAXB註釋更容易,更方便,在編組方面/解組沒有的DOM API有更好的表現?

此外,有什麼指導什麼時候選擇什麼XML處理庫? 對於多種內容類型處理,選擇不同的庫會更好嗎?例如。傑克遜的JSON和JAXB的XML(純粹是爲了表現)。

對於JSON內容類型,在將JSON轉換爲DOM對象或從DOM對象轉換JSON時是否存在任何開銷?

+0

總之,去StAX(在JAXB /傑克遜支持)。 DOM不適用於大型XML,所以您需要基於事件的SAX或StAX,並且StAX更易於處理。傑克遜,伍德斯托克是一條路。 – lexicore 2015-02-11 15:09:44

+0

謝謝。感謝您的幫助... – dinup24 2015-02-13 11:50:00

回答

0

好吧,幾點:

  1. 是,JSON和DOM(XML)之間的轉換不僅有顯著(並且,通常不必要的)的開銷。更糟糕的是,由於JSON和XML具有不同的信息模型,這通常是有損的。在我看來,應該避免使用這個選項(Jettison等)。
  2. 對於JAXB式的操作,也有傑克遜XML模塊(https://github.com/FasterXML/jackson-dataformat-xml/),支持XML和JSON
  3. DOM是方法較慢部分原因是由於2相處理時,並且其可以方便部分是因爲存儲器使用是3 -5X比更高的直接數據綁定(取決於類型的數據)

基於DOM的方法的一些好處是:

  1. 這是XML特定的,因此,如果特定的XML方面或工裝事(使用XPath,XML Schema)可以交流詳細介紹XML的使用情況
  2. 由於DOM是無類型的,靈活的,它有時更適合動態和鬆散的(...或者糟糕的)結構化數據。

但我會同意@lexicore在該DOM應該是最後的選擇,如果其他方法不起作用。特別是在處理大量數據時。

+0

感謝您的詳細解釋。這絕對有幫助 – dinup24 2015-02-18 14:26:27