2

我使用 JAXB marshaller 将一些 java 对象存储为 XML 文件。其中一些对象相互引用,所以我不出所料地得到这个错误:

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

包括删除循环并仅使用树结构的解决方案是不可行的 - 我需要两个导航方向。

为了解决这个问题,我宁愿使用 xlink 来引用 xml 对象,而不是级联复制它们。这个解决方案是否相关?使用 JAXB 编组器可以做到这一点吗?如何?

4

2 回答 2

3

您可以使用XmlAdapter. 以下是各种类似答案的链接。

我领导了 EclipseLink JAXB (MOXy) 的实现,我们有@XmlInverseReference你可能感兴趣的用于映射双向关系的扩展:

于 2011-10-03T13:38:31.060 回答
0

伙计,您可以在其中一个实体中注释注释@XmlTransient,这样在 unmarch 时,它就不会抱怨循环问题。

但是在 unmarch xml 之后使用 thius 解决方法,您将不得不使用@XmlTransient.

我正在阅读一些论文并找到了这个。你可以设置@XmlTransient和使用回调方法在 unmarch 之后做一些事情。因此,您可以将父母设置为您的孩子。

public void afterUnmarshal(Unmarshaller u, Object parent) {
    this.pessoa = (Pessoa) parent; }
于 2012-05-29T12:48:52.150 回答