2012-05-14 80 views
1

我需要生成一個大的xml。我目前正在使用JAXB 2.0。使用jaxb生成大的xml

問題是如果我將所有對象放在內存中並且生成堆空間耗盡的概率非常高。

我想知道如何做到這一點的最佳方法。

謝謝

+0

從你的問題,我猜你的源數據沒有在JAXB對象一起開始這是正確的(數據庫,遠程服務?)?如果是這樣,那麼我建議你考慮不使用JAXB來編組XML。相反,直接從您的源數據中編寫XML,並保存構建所有這些對象的內存負擔,以便將它們編組爲xml。 –

+0

@Patrice:輸入來自JSON字符串。我需要構建這些對象,在它們之上運行一些規則(Drools)。最後我需要將它們編成XML。所以我不能直接從源代碼運行它們。 – Balaji

回答

0

我建議喲以下。

你如何創建你的XML?我想你首先創建你的對象圖,即創建它們之間的所有對象和依賴關係。然後調用是這樣的:

JAXBContext.newInstance("YOUR PACKAGES LIST").marshal(rootObject, out);

JAXB訪問你的對象如豆類,使用干將即。所以,在編組之前,你並不需要創建完整的對象圖。你只需要提供getter的按需實現,以便他們能夠根據請求獲取對象。我相信它會幫助你減少內存消耗。

如果你不想在你的類內部實現這種按需機制,你可以使用AspectJ或其他面向方面的庫(或直接的字節碼修改庫,如cglib或javassist)將按需檢索代碼插入到你的模型對象。

+0

是的....我創建所有的對象,然後發送給編組。然而,我已經改變了設計,使得重複對象(作爲員工數據的XML中的節點)分批完成(創建對象並填充數據),因此沒有堆空間問題。我們如何執行按需實施? – Balaji