1

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は親要素をコレクションとして扱っているため(これはそうです)、コレクションのすべてのメンバーをダンプしています! 迷惑。

4

0 に答える 0