2011-10-03 39 views
1

我使用JAXB marshaller將一些java對象存儲爲XML文件。一些這些對象的相互引用,所以我意料之中獲得此錯誤:如何強制JAXB編組使用xlink引用?

[com.sun.istack.internal.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML 

其中包括在移除所述週期和僅使用樹結構的解決方案是不可行的 - 我需要兩個適航方向。

要解決此問題,我寧願使用xlink來引用xml對象,而不是將它們級聯複製。這個解決方案是否合適?是否有可能通過JAXB編組來做到這一點?怎麼樣?

回答

3

您可以使用XmlAdapter在JAXB中實現XLink方法。以下是各種類似答案的鏈接。

我帶領的EclipseLink JAXB(莫西)實現,而我們有@XmlInverseReference擴展名映射雙向關係,你可能感興趣的:

+0

非常感謝您的回答。我會看看鏈接。 – julien

0

老兄,你可以在實體的一個註解@XmlTransient注意,所以unmarch的時候,也不會抱怨的週期問題。

但是,在unmarch xml之後,您必須使用@XmlTransient填充屬性。

我正在讀一些紙張並找到它。您可以設置@XmlTransient並使用回調方法在未登記之後執行某些操作。所以你可以設置父母給你的孩子。

public void afterUnmarshal(Unmarshaller u, Object parent) { 
    this.pessoa = (Pessoa) parent; }