简体   繁体   English

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

[英]How to marshal/unmarshal linked Java objects using JAXB

I've already asked a question about JAXB very recently which can be found at: How to marshal/unmarshal Java objects with private fields using JAXB . 我最近已经问过一个有关JAXB的问题,可以在以下位置找到它: 如何使用JAXB将Java对象与私有字段一起编组/取消编组

My current problem is that I am trying to marshal a graph structure implemented using adjacency list structure. 我当前的问题是我试图封送使用邻接表结构实现的图结构。

Vertex class: 顶点类:

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

Edge class: 边缘类:

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

Graph class: 图类:

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

When I populate a graph instance and try to marshal it I get an Exception, javax.xml.bind.MarshalException in particular. 当我填充一个图实例并尝试封送它时,我得到一个异常,特别是javax.xml.bind.MarshalException。

As far as I understand this problem is due to the fact that The Vertex class is storing a Vertex ArrayList which is a potential loop so JAXB is complaining about that. 据我了解,这个问题是由于以下事实造成的:Vertex类存储了一个Vertex ArrayList,这是一个潜在的循环,因此JAXB对此有所抱怨。 I googled around a bit but cannot seem to fund a solution for this. 我在Google上搜索了一下,但似乎无法为此提供解决方案。

If every node in your XML is referenced through a containment relationship (such as @XmlElement , then you can use @XmlID / @XmlIDREF to use key based relations to turn the tree into a graph. 如果XML中的每个节点都是通过包含关系(例如@XmlElement )引用的,则可以使用@XmlID / @XmlIDREF来使用基于键的关系将树变成图。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM