如何使用JAXB编组/解组链接的Java对象

时间:2013-04-28 22:29:15

标签: java xml jaxb marshalling unmarshalling

我最近已经问过一个关于JAXB的问题,可以在How to marshal/unmarshal Java objects with private fields using JAXB找到。

我目前的问题是我正在尝试编组使用邻接列表结构实现的图结构。

顶点类:

@XmlElement
private int index;
@XmlElementWrapper(name="adj_list")
@XmlElement(name="vertex")
private ArrayList<Vertex> adjList;

边缘类:

@XmlElement(name="vertex")
private Vertex v1;
@XmlElement(name="vertex")
private Vertex v2;
@XmlElement
private String label;

图表类:

@XmlElementWrapper(name="vertices")
@XmlElement(name="vertex")
private ArrayList<Vertex> vertices;
@XmlElementWrapper(name="edges")
@XmlElement(name="edge")
private ArrayList<Edge> edges;

当我填充图形实例并尝试封送它时,我得到一个异常,特别是javax.xml.bind.MarshalException。

据我所知,这个问题是由于Vertex类正在存储一个Vertex ArrayList,这是一个潜在的循环,因此JAXB抱怨这一点。我用Google搜索了一下,但似乎无法为此提供解决方案。

1 个答案:

答案 0 :(得分:0)

如果XML中的每个节点都通过包含关系(例如@XmlElement)引用,那么您可以使用@XmlID / @XmlIDREF来使用基于密钥的关系将树转换为曲线图。