我有一个相当复杂的数据结构,我似乎无法正确解组。
@XmlRootElement
class Tree {
@XmlID
private String id;
@XmlJavaTypeAdapter(type=TreeFooAdapter.class)
Map<Tree, Foo> fooMap;
}
class Foo {
@XmlID
private String id;
}
我有两棵独立的树。两个节点(每棵树一个)可以配对并与 Foo 的一个实例相关联。fooMap 用于跟踪给定树节点已与哪些其他节点配对,以及 Foo 结果的哪些实例。
TreeFooAdapter 非常简单,但请注意它使用 ID refs:
public class TreeFooAdapter extends XmlAdapter<TreeFooAdapter.MapType, Map<Tree, Foo>> {
public static class MapType {
public static class MapEntry {
@XmlAttribute
@XmlIDREF
public Tree key;
@XmlAttribute
@XmlIDREF
public Foo value;
}
// etc...
}
// Standard drill for marshal/unmarshal...
}
问题:前向引用不起作用!解组时,无论哪个 Tree 在 XML 中最先出现,其 fooMap 中的键都为空。由于这两棵树相互引用,因此我无法更改 XML 的顺序来解决这个问题。
我尝试了一个 hack,其中我有一个私有方法来获取/设置 a List<TreeFooMapEntry>
,但它产生了相同的结果。
为什么当它们包含在 Map 或 List 中时,JAXB 无法处理前向 ID 引用,我该如何解决这个问题?