我有一个类(Bundle),其中包含对 Bundle 的“父”实例的引用。这用于记录新 Bundle 是从哪个对象“复制”的。此类包含在另一个类 (Main) 的 List<> 中,并且它本身包含一个 (不同) 子类 (Elements) 的 List<>。
保存到 XML 时,引用属性包含来自父 Bundle 中包含的元素的 ID,而不是父 Bundle 的 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 字段通常是从一个Bundle in bundles 到一个Bundle in masterBundles。这是一个示例输出:
<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 将父元素视为一个集合(它就是这样),所以正在转储集合的所有成员!恼人的。