我在解码(孙)子表的元素时遇到问题。这是传入数据的结构:
<searchResultDocuments>
<pageNumber>1</pageNumber>
<pageSize>1</pageSize>
<results>
<contentType>text/html</contentType>
<fileName>theFile.txt</fileName>
<mainDoc>
<dates>
<date>
<match>20170822</match>
<startOffset>4324</startOffset>
</date>
...
</dates>
<entities>
<entity>
<startOffsets>4324 5634</startOffsets>
<entityType>featuretype</entityType>
<entity>
...
</entities>
</mainDoc>
</results>
...
</searchResultDocuments>
捕获数据的java类如下所示:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="searchResultDocuments")
public class SearchReturnData{
@XmlElement
private int pageNumber;
@XmlElement
private int pageSize;
@XmlElement(name="results")
private List<ResultData> resultData;
//(no setters, getters only in all classes, although I tried it both ways)
}// end of SearchResultData
@XmlAccessorType(XmlAccessType.FIELD)
public class ResultData{
@XmlElement
private String contentType;
@XmlElement
private String fileName;
@XmlElement(name="mainDoc")
private MainDoc mainDoc;
} // end of ResultData
@XmlAccessorType(XmlAccessType.FIELD)
public class MainDoc{
@XmlElement(name="dates")
private List<DateData> dates;
@XmlElement(name="entities")
private List<EntityData> entities;
}// end of MainDoc
@XmlType(name="date")
public class DateData{
@XmlElement(name="match")
private String match;
@XmlElement(name="startOffset")
private String startOffset;
}// end of DateData
@XmlType(name="entity")
public class EntityData{
@XmlElement(name="startOffsets")
private String startOffsets;
@XmlElement(name="entityType")
private String entityType;
}// end of EntityData
当我将传入数据解码到此结构中时,我获得了 DataData 和 EntityData 的正确行数,但没有一个元素具有数据。我尝试过使用和不使用 setter,但这没有什么区别。
最佳答案
在您的 MainDoc
中类,您需要在列表上使用元素包装器。
@XmlElementWrapper(name="dates")
@XmlElement(name="date")
public List<DateData> dates;
@XmlElementWrapper(name="entities")
@XmlElement(name="entity")
public List<EntityData> entities;
此外,您的 XML 不会关闭 <entity>
项目,它应该具有 <entity>
之一和 </entity>
之一而不是 <entity>
中的两个.
关于java - JAXB(Grand)子元素数据未填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45982688/