2011-09-15 48 views
2

阻止使用綁定技術(如JAXB)而不是使用經典的基於dom/sax的xml技術的一件事是,在讀取xml時,它似乎強烈地實例化了類它管理。
JAXB和類實例化

很多時候,我想從xml中讀取值並將它們設置爲已創建實例的屬性。
是否有一種簡單的方法可以告訴JAXB它必須將值應用於我所創建的類,而不是創建一個新類?

+1

在您的用例中,XML和現有實例(即ID屬性)之間的鏈接是什麼? –

+0

問題是如果基於jaxb的庫想要創建實例,它們將不適用於其他框架實例化類的地方。想一想容器實例化bean的位置。或者是擺動,我經常想要保存gui組件的某些屬性,但我也想自己創建它們(或者我的ide需要這樣做)。我的想法是一個「每類」方法,我將jaxb傳遞給類(或「返回我的類的工廠」),一個xml節點,它將屬性加載到類屬性中。 – AgostinoX

+0

我仍然試圖掌握用例。是否存在想要映射到XML的現有類,或者是否存在希望JAXB填充到的類的現有實例? –

回答

2

將JAXB對象用作DTO。然後,您可以使用PropertyUtils.copyProperties(..)/BeanUtils.copyProperties(..)(來自commons-beanutils)將屬性傳輸到已經部分填充的對象。

+0

好的,但從建築的角度來看,DTO樹就像構建一個類型化的dom,不是嗎? – AgostinoX

+0

我不明白評論 – Bozho

+0

好吧,我再解釋一下。當您使用基於某種類型的dom(dom,jdom,dom4j,xom)的xml庫時,您將構建一個代表xml文件的內存樹。然後你從樹上得到你想要的值。使用DTO,您可以構建一個內存樹,而不是由「節點」對象(或「元素」和「屬性」對象或任何取決於所使用的特定庫)組成的內存樹,僅由我的ClassA ClassB是我的DTO課程。 – AgostinoX