java - JAXB(Grand)子元素数据未填充

标签 java jaxb

我在解码(孙)子表的元素时遇到问题。这是传入数据的结构:

<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/

相关文章:

java - JAXB - 如何在没有 header 的情况下编码(marshal) Java 对象

java - Java 6 是否支持开箱即用的遗留 JAXB1?

javax.xml.bind.UnmarshalException : unexpected element even if @XmlRootElement is added

java - JAXB "rename"子类中父类的属性

java - JAXB - 忽略 XML 元素

java - WebDriver:检查元素是否存在?

java - Android 更新新版本后重新启动应用程序

java - 如何在 Java 中将脚本作为文件运行?

java - 获取适用于 Java 中特定 HTML 类的 CSS 规则列表

java - 如何手动添加插件到现有的eclipse项目?