Bundle の「親」インスタンスへの参照を含むクラス (Bundle) があります。これは、新しいバンドルが「コピー」されたオブジェクトを記録するために使用されます。このクラスは、別のクラス (Main) の List<> 内に含まれており、それ自体に (異なる) 子クラス (Elements) の List<> が含まれています。
XML に保存すると、参照属性には、親バンドルの ID ではなく、親バンドル内に含まれる要素の ID が含まれます。
私の質問は、Bundle.parent を XML で Bundle.id として表示するにはどうすればよいですか?
コード スニペットが続きます。すべてのクラスは FIELD アクセサーです。
public class Element {
@XmlID
@XmlAttribute
public String id;
}
public class Bundle extends AbstractList<Element> {
@XmlID
@XmlAttribute
public String id;
@XmlElementWrapper
@XmlElemet(name = "element")
@XmlIDREF
public List<Element> elements;
@XmlElement
public Bundle parent;
}
public class Main AbstractList<Bundle> {
@XmlAttribute
@XmlID
public String id;
@XmlElementWrapper
@XmlElement(name = "bundle")
public List<Bundle> bundles;
@XmlElementWrapper
@XmlElement(name = "masterBundle")
static final public List<Bundle> masterBundles;
}
final JAXBContext jc = JAXBContext.newInstance(Main.class);
Bundle.parent フィールドは通常、bundles 内の Bundle から masterBundles 内の Bundle です。出力例を次に示します。
<masterBundles>
<bundle id="999594e2-043d-45ed-9ee3-34b11e6297fd" name="Bundle1">
<elements>
<element>4501a2e5-05af-4760-92be-29dacb2e2d70</element>
<element>449cec85-7eb7-4ba9-b03e-2b5708bee076</element>
</elements>
</bundle>
</masterBundles>
<bundles>
<bundle id="7e07ae32-2bcc-49db-be0b-f04ab53f75e0" name="New Bundle">
<elements>
<element>4501a2e5-05af-4760-92be-29dacb2e2d70</element>
<element>449cec85-7eb7-4ba9-b03e-2b5708bee076</element>
</elements>
<parent>4501a2e5-05af-4760-92be-29dacb2e2d70</parent>
<parent>449cec85-7eb7-4ba9-b03e-2b5708bee076</parent>
</bundle>
</bundles>
更新: 問題が見つかったと思います.JAXBは親要素をコレクションとして扱っているため(これはそうです)、コレクションのすべてのメンバーをダンプしています! 迷惑。