我有一個相當複雜的數據結構,我似乎無法正確取消編組。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