2008-11-04 49 views
5

我有一個XML模式,我需要爲其創建Java類。它不是一個特別大的模式,我會說它會導致大約20個類。我試圖權衡是否使用自動綁定程序(如JAXB或JiBX中提供的程序),還是手動編寫我自己的類並使用類似XStream的東西來進行編組/解組。Java綁定與手動定義類

與使用綁定程序相比,編寫自己的類有哪些優點/缺點。

此外,我使用綁定程序,我是永遠綁在那。例如,如果我使用JAXB的綁定編譯器來創建類,那麼我是否必須使用JAXB來進行所有編組/解組?

p.s.我已經看到了有關XML綁定/序列化,這是非常有用的下列問題,但並沒有完全回答我的問題: xml-serialization-in-javajava-xml-binding

回答

13

我不認爲這是一個明確的回答你的問題。但是我可以給你一些難得的建議。以下是一些需要考慮的事項:

  1. 編寫編組和開發代碼非常耗時,尤其是第一次。

  2. 您將不得不花很多時間學習DOM庫(Xerces或其等價物)的細微差別。

  3. 有很多重複,所以你最終會被迫寫一些助手類。

  4. 您需要進行大量的單元測試,以確保您覆蓋了可選元素和屬性區域中的所有基礎。

看看這個列表很容易說「這就是JAXB爲我做的」。經過多年的工作,我會說JAXB爲您節省了相當多的時間和精力,尤其是Java 5/6中最新的JAXB迭代。

但是如果你去JAXB有一個教訓,我們已經瞭解到,我想傳遞下去硬盤的方式:

***不要讓JAXB生成的類泄漏到您的應用程序。

正如您在您的問題中所述,這會將您的整個應用程序與JAXB執行操作的方式聯繫起來。如果JAXB不得不被替換(未來有很多原因可以做到這一點),那麼你將面臨一個充滿挑戰和痛苦的任務(相信我,我們已經做到了,我們永遠不會陷入再次定位)。

現在我們總是將我們的JAXB生成的類隱藏在外觀或工廠後面,從JAXB類映射到具有所需行爲的我們自己的域POJO。我們在做JDBC的時候會考慮JAXB; JAXB只是另一種數據源,是從域POJO獲取數據的另一種方式。域名POJO是祕密醬油,我們控制它們的編碼方式以及它們的使用方式。 JAXB只是編組和解組的工具。

+0

「編寫編組和開發代碼非常耗時,特別是第一次。」 - 確實如此,我想補充一句推論:「你至少會犯錯一次。」 – 2008-11-04 12:35:07

0

我不想就這個問題展開漫長而無休止的冬青戰爭,但從我的經驗來看 - 如果您可以使用爲您生成所有代碼並且不需要JAR可靠的工具。將生成的代碼將會很難看,但它會起作用,直到您明確地看到需要手工編寫代碼。在大多數情況下,你不需要那樣做。很抱歉,我無法立即推薦使用哪種工具。