5

我有两个课程:

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 实现是否支持它?

4

2 回答 2

2

注意: 我是EclipseLink JAXB (MOXy)负责人,也是JAXB (JSR-222)专家组的成员。

MOXy具有@XmlInverseReference映射双向关系的扩展。

一个

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>

了解更多信息

于 2012-01-23T11:01:07.323 回答
1

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

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

于 2012-01-23T11:10:08.197 回答