2012-06-06 42 views
4

我有一個關於JAXB幾個問題:評估JAXB

  1. 哪些選項有解析?我可以輕鬆實現/插入我自己的解析器嗎?

  2. 有效性呢?假設我有一個輕鬆的解析器,對於模式有點寬鬆。我還可以創建一個(無效的)對象結構嗎?

  3. 是否JAXB提供特殊手段,例如做驗證對象?我想分析一個「無效的」對象結構,讓一些算法修復它,然後驗證(在Java中)。

  4. JAXB是否提供其它裝置做在對象上花哨的東西(例如訪問者模式)。

  5. 內存佔用情況如何?對象表示(不考慮解析)對於10-100MB的文件是否可行?

涵蓋這類問題的好教程是值得讚賞的,Google只透露了粗略的概述。

回答

3

下面是我的問題的答案:

哪些選項有解析?我可以輕鬆實現/插入我自己的 解析器嗎?

JAXB(JSR-222)實施方式可以從許多不同的輸入類型解組:InputStreamInputSource',節點, XMLStreamReader的,的XMLEventReader ,文件, Source`。如果你的XML表示匹配其中的任何一個,那麼你就全部設置好了。

什麼效力?假設我有一個輕鬆的解析器,對模式有些放鬆了。我還能創建一個(無效的)對象結構嗎?

JAXB實現要求XML格式良好,但不要求它對XML模式有效。它旨在處理各種文檔。如果你想確保「有效性」,那麼你可以設置一個XML模式(見JAXB and Marshal/Unmarshal Schema Validation)。

是否JAXB提供特殊手段,例如做驗證對象? 我想分析一個「無效」的對象結構,讓一些 算法修復它,然後驗證(使用Java)。

您可以使用javax.xml.validation API對對象模型進行驗證。對於一個完整的例子請參閱:

是否JAXB提供其他手段做上的對象(例如 訪問者模式)花哨的東西。

JAXB模型是POJO,因此您可以根據需要進行設計。你可能有興趣在以下類別:

怎麼樣的內存佔用?對象表示 (不考慮解析)對於10-100MB的XML文件是否可行?

是JAXB可用於處理那種大小的文檔。如果您擔心大小,可以使用XMLStreamReader來解析XML文件,然後以塊的形式解組XMLStreamReader中的對象。

+0

謝謝,布萊斯這是非常有幫助的。你能推薦一本關於XML數據綁定的好書,也包括設計問題(例如可變/不可變模型,處理不完美的數據) – Bastl

+1

@Bastl - 我沒有任何書籍推薦,但我有一個非常活躍的XML和JSON綁定博客你可能會發現有用的:http://blog.bdoughan.com –