Reputation: 165
I have an xml document such as :
<ParentClass>
<FirstClass>
<Row>
<data1>...<data1>
<data2>...<data2>
</Row>
<Row>
<data1>...<data1>
<data2>...<data2>
</Row>
</FirstClass>
<SecondClass>
<Row>
<data1>...<data1>
<data2>...<data2>
</Row>
<Row>
<data1>...<data1>
<data2>...<data2>
</Row>
</SecondClass>
</ParentClass>
I have the java classes as below:
@XmlRootElement(name = "ParentClass")
@XmlAccessorType(XmlAccessType.FIELD)
public class ParentJavaClass
{
@XmlElement(name="FirstClass")
private List<FirstJavaClass> fc;
public List<FirstJavaClass> getFc()
{
return fc;
}
public void setFc(List<FirstJavaClass> fc)
{
this.fc = fc;
}
@XmlElement(name="SecondClass")
private List<SecondJavaClass> sc;
public List<SecondJavaClass> getSc()
{
return sc;
}
public void setSc(List<SecondJavaClass> sc)
{
this.sc = sc;
}
}
@XmlType(name = "Row", namespace = "Fc")
@XmlAccessorType(XmlAccessType.FIELD)
public class FirstJavaClass
{
private String data1;
private String data2;
// getters & setters
}
@XmlType(name = "Row", namespace = "Sc")
@XmlAccessorType(XmlAccessType.FIELD)
public class SecondJavaClass
{
private String data1;
private String data2;
// getters & setters
}
But, when I call
final ParentJavaClass x = (ParentJavaClass) jaxbUnmarshaller.unmarshal(file);
the resulting lists for both my FirstJavaClass & SecondJavaClass has all null values. I think the "Row" element is what is tripping me, but am not sure how to annotate that correctly. Please assist. Thanks.
Upvotes: 1
Views: 102
Reputation: 148977
You should annotate as follows:
@XmlElementWrapper(name="FirstClass")
@XmlElement(name="Row")
private List<FirstJavaClass> fc;
@XmlElementWrapper(name="SecondClass")
@XmlElement(name="Row")
private List<SecondJavaClass> sc;
The annotations mean:
@XmlElementWrapper
corresponds to the element you want to nest your collection data withing.FirstJavaClass
is going to correspond to a Row
element nested within the FirstClass
element.Debugging Trick
When your JAXB object model does not unmarshal correct, try:
Upvotes: 1