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