2010-01-11 95 views
9

Castor XML和JAXB綁定有什麼區別,因爲它們都是將java對象綁定到XML,反之亦然。Castor XML綁定和JAXB綁定有什麼區別

更新時間:

由於使用蓖麻我能做到這一點假設packageA.ClassApackageB.ClassA具有相同的屬性和類的名稱只是他們分別位於不同的包。

packageA.ClassA - > XML -> packageB.ClassA 

通過使用JAXB,如果我這樣做馬歇爾對象packageA.ClassA到XML和XML解組爲對象packageB.ClassA我鑄造錯誤。

回答

15

請注意,JAXB是一個API,並有多個可用的實現。

Sun提供了一個參考實現,並將其與J2EE打包(也可在J2SE 1.6中使用它)。 Castor誕生於JAXB從Sun出來之前,並提供了一些額外的功能。但是如果你想要的只是簡單的XML綁定,那麼參考的Sun實現應該很好。

JavaWorld中有很棒的article。有點古老,但大多數的想法解釋仍然很好。而且你不會找到提到JAXB註釋的文章,這些註釋現在讓事情變得更加簡單。

簡單是一個易於使用的綁定框架,並以最小的「簡單」配置工作。

DOM是一個不同的概念 - 它的全部內容都是關於解析和綁定。使用DOM解析器,您可以從XML中提取數據。但它不給你一個對象映射工具。所以你仍然需要使用DOM來獲取數據,然後編寫代碼將這些數據推送到java對象。

+0

嗨,感謝您對DOM概念的解釋非常清楚 – user236501 2010-01-11 07:13:45

+0

@newbie:如果你喜歡這個答案,請考慮接受它,或者至少給它一個upvote。謝謝! – 2010-06-16 18:02:54

3

由於給定的JAXBContext實例將每個根XML元素名稱與一個綁定類相關聯,因此會得到類轉換異常。

因此,當您將packageA.ClassA編碼爲XML,然後再將其解組時,結果將爲packageA.ClassA,並且您無法進行該操作。

如果你想解組編號爲packageB.ClassA,那麼你需要建立第二個JAXBContext。第一個JAXBContext知道約packageA.ClassA,第二個知道約packageB.ClassA。使用第一個用於編組到XML,第二個用於解組。這將按照您的預期工作。

相關問題