2

JAXBマーシャラーを使用していくつかのJavaオブジェクトをXMLファイルとして保存します。これらのオブジェクトのいくつかは相互に参照しているため、当然のことながら次のエラーが発生します。

[com.sun.istack.internal.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML

サイクルを削除し、ツリー構造のみを使用するという解決策は実行可能ではありません。両方のナビゲーション方向が必要です。

この問題を解決するには、カスケードでコピーするのではなく、xlinkを使用してxmlオブジェクトを参照します。このソリューションは適切ですか?JAXBマーシャラーでそれを行うことは可能ですか?どのように?

4

2 に答える 2

3

を使用して、JAXB で XLink アプローチを実装できますXmlAdapter。以下は、さまざまな同様の回答へのリンクです。

私は EclipseLink JAXB (MOXy) の実装をリードしており、@XmlInverseReference興味のある双方向関係をマッピングするための拡張機能があります。

于 2011-10-03T13:38:31.060 に答える
0

おい、あなたはエンティティの1つに注釈を付けることができる@XmlTransientので、行進を止めるとき、サイクルの問題について文句を言うことはありません。

しかし、この回避策では、xml を unmarch した後、属性に@XmlTransient.

私はいくつかの紙を読んでいて、これを見つけました。コールバック メソッドを設定@XmlTransientして使用すると、アンマーチ後に何かを行うことができます。したがって、親を子に設定できます。

public void afterUnmarshal(Unmarshaller u, Object parent) {
    this.pessoa = (Pessoa) parent; }
于 2012-05-29T12:48:52.150 に答える