I have a problem while unmarshalling some xml in objects with cyclic references to one another. This is my xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<computer>
<computerId>3</computerId>
<keyboard>
<computer>3</computer>
<keyboardId>3</keyboardId>
</keyboard>
<keyboard>
<computer>3</computer>
<keyboardId>1</keyboardId>
</keyboard>
</computer>
And here are my JAXB enabled classes: Computer.java:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "computer", propOrder = {
"computerId",
"keyboard"
})
@XmlRootElement
public class Computer {
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlID
@XmlSchemaType(name = "ID")
protected String computerId;
protected List<Keyboard> keyboard;
public String getComputerId() {
return computerId;
}
public void setComputerId(String value) {
this.computerId = value;
}
public List<Keyboard> getKeyboard() {
if (keyboard == null) {
keyboard = new ArrayList<Keyboard>();
}
return keyboard;
}
}
Keyboard.java:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "keyboard", propOrder = {
"computer",
"keyboardId"
})
public class Keyboard {
@XmlElement(type = Computer.class)
@XmlIDREF
@XmlSchemaType(name = "IDREF")
protected Computer computer;
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlID
@XmlSchemaType(name = "ID")
protected String keyboardId;
public Computer getComputer() {
return computer;
}
public void setComputer(Computer value) {
this.computer = value;
}
public String getKeyboardId() {
return keyboardId;
}
public void setKeyboardId(String value) {
this.keyboardId = value;
}
}
When I try to unmarshal the xml uptop the second keyboard object has its computer field null. If I try it with this xml (notice the order of the two keyboards changed) everything works fine:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<computer>
<computerId>3</computerId>
<keyboard>
<computer>3</computer>
<keyboardId>1</keyboardId>
</keyboard>
<keyboard>
<computer>3</computer>
<keyboardId>3</keyboardId>
</keyboard>
</computer>
Can somebody help me so that both examples can be unmarshalled without any null fields.
Thanks.
No comments:
Post a Comment