我有一个相当复杂的数据结构,我似乎无法正确取消编组。JAXB XmlIDREF和地图/列表
@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裁判:
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的顺序来解决这个问题。
我试过了一个黑客,其中我有一个私人方法来获取/设置List<TreeFooMapEntry>
,但它会产生相同的结果。
为什么JAXB在包含在Map或List中时无法处理转发ID引用,以及如何解决这个问题?
...虽然在为我的单元测试添加更多深度之后,我发现这不起作用,无论是... :( – Kricket