哪个Java XML绑定框架支持循环/循环依赖?

时间:2012-01-23 09:49:20

标签: java xml jaxb marshalling idref

我有两节课:

public class A {
  B refToB;
}

public class B {
  A refToA;
}

它们没有唯一的id字段(JAX-B XMLID和XMLIDREF是必需的)。

对象实例:

A a = new A();
B b = new B();
a.refToB = b;
b.refToA = a;

我希望在存储循环/循环依赖项时将a编组为XML,例如:

<a id="gen-id-0">
  <b>
    <a ref-id="gen-id-0" />
  </b>
</a>

我发现支持这个的框架之一是XStream:http://x-stream.github.io/graphs.html

其他哪些框架支持此功能?

某些JAX-B实现是否支持它?

2 个答案:

答案 0 :(得分:2)

注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。

MOXy 具有@XmlInverseReference扩展名,用于映射双向关系。

<强> A

import javax.xml.bind.annotation;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class A {
  @XmlElement(name="b")
  B refToB;
}

<强>乙

import javax.xml.bind.annotation;
import org.eclipse.persistence.oxm.annotations.XmlInverseReference;

@XmlAccessorType(XmlAccessType.FIELD)
public class B {
  @XmlInverseReference(mappedBy="refToB")
  A refToA;
}

<强> XML

以上分类将映射到以下XML

<a>
    <b/>
<a>

了解更多信息

答案 1 :(得分:1)

几年前我和Betwixt合作过。他们声称支持,请参阅http://commons.apache.org/betwixt/faq.html#cycles

唉,设置一个简单的测试到目前为止对我来说不起作用,输出只是<A id="1"><B/></A>,而B中的A指针静默忽略。必须有一些我未能设置的映射选项...