When an object is stored in a map, it can't be referenced and a CycleException occured.
For example, the following exception occured when executing the test below :
Exception in thread "main" org.simpleframework.xml.strategy.CycleException: Invalid reference 'id1' found
test.xml
--------------------
<?xml version="1.0"?>
<root>
<aelements>
<aelement id="id1" name="AElement1"/>
<aelement id="id2" name="AElement2"/>
</aelements>
<belements>
<belement name="BElement1">
<aelement ref="id1" />
</belement>
<belement name="BElement2">
<aelement ref="id1" />
</belement>
</belements>
</root>
AElement.java :
--------------------
@Root
public class AElement {
@Attribute
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
BElement.java
--------------------
@Root
public class BElement {
@Attribute
private String name;
@Element
private AElement aelement;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public AElement getAelement() {
return aelement;
}
public void setAelement(AElement aelement) {
this.aelement = aelement;
}
}
Test.java
--------------------
@Root
public class Test {
@ElementMap(key="id")
private Map<String, AElement> aelements;
@ElementList
private List<BElement> belements;
public Map<String, AElement> getAelements() {
return aelements;
}
public void setAelements(Map<String, AElement> aelements) {
this.aelements = aelements;
}
public List<BElement> getBelements() {
return belements;
}
public void setBelements(List<BElement> belements) {
this.belements = belements;
}
}
App.java
--------------------
public class App {
public static void main (String[] args) throws Exception {
Strategy strategy = new CycleStrategy("id", "ref");
Serializer serializer = new Persister(strategy);
File source = new File("./test.xml");
Test test = serializer.read(Test.class, source);
}
}