我有一个 xml 文档,例如:
<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>
我有如下java类:
@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
}
但是,当我打电话时
final ParentJavaClass x = (ParentJavaClass) jaxbUnmarshaller.unmarshal(file);
我的 FirstJavaClass 和 SecondJavaClass 的结果列表全部为空值。我认为“行”元素让我困惑,但我不确定如何正确注释它。 请协助。谢谢。
最佳答案
您应该注释如下:
@XmlElementWrapper(name="FirstClass")
@XmlElement(name="Row")
private List<FirstJavaClass> fc;
@XmlElementWrapper(name="SecondClass")
@XmlElement(name="Row")
private List<SecondJavaClass> sc;
注释的意思是:
@XmlElementWrapper
对应于您想要在其中嵌套集合数据的元素。FirstJavaClass
的每个实例都将对应于嵌套在FirstClass
元素中的一个Row
元素。
调试技巧
当您的 JAXB 对象模型未正确解码时,请尝试:
- 填充它并将其编码为 XML。
- 然后将此 XML 与您尝试解码的 XML 进行比较,看看有什么差异。
- 调整注释,直到编码的 XML 与您尝试解码的内容匹配
- 解码 XML。
关于java - JAXB - java类的正确注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24127116/