如何强制JAXB marshaller使用xlink引用?

时间:2011-10-03 13:08:08

标签: jaxb xlink

我使用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 marshaller来做到这一点?怎么样?

2 个答案:

答案 0 :(得分:3)

您可以使用XmlAdapter在JAXB中实现XLink方法。以下是各种类似答案的链接。

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

答案 1 :(得分:0)

老兄,你可以在其中一个实体中注明注释 @XmlTransient ,所以当unmarch时,它不会抱怨周期问题。

但是,在使用xml unmarch之后使用thius解决方法,您必须使用@XmlTransient填充属性。

我正在阅读一些论文并找到了。你可以设置@XmlTransient并使用回调方法在unmarch之后做一些事情。所以你可以把父母设置为你的孩子。

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