2013-04-28 1 views
1

Я уже задал вопрос о JAXB совсем недавно, который можно найти по адресу: How to marshal/unmarshal Java objects with private fields using JAXB.Как связать Java-объекты с помощью JAXB с помощью JAXB

Моя текущая проблема заключается в том, что я пытаюсь маршалировать структуру графа, реализованную с использованием структуры списка смежности.

Vertex Класс:

@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; 

Graph Класс:

@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, но, похоже, не мог финансировать решение для этого.

ответ

0

Если каждый узел в вашем XML ссылается через отношения локализации (например, @XmlElement, то вы можете использовать @XmlID/@XmlIDREF использовать отношения, основанные ключ, чтобы превратить дерево в граф.