5

私は2つのクラスを持っています:

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>

これをサポートするフレームワークの1つは、XStreamです。http://x-stream.github.io/graphs.html

この機能をサポートする他のフレームワークは何ですか?

一部のJAX-B実装はそれをサポートしていますか?

4

2 に答える 2

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;
}

B

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 に答える