Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB:如何在包装器中解组不同类型的对象列表?_Java_Jaxb - Fatal编程技术网

Java JAXB:如何在包装器中解组不同类型的对象列表?

Java JAXB:如何在包装器中解组不同类型的对象列表?,java,jaxb,Java,Jaxb,我很难用JAXB解析以下xml: <?xml version="1.0" encoding="utf-8"?> <dashboardreport name="exampleDashboard" version="6.5.6.1013" reportdate="2016-12-16T11:05:19.329+01:00" description=""> <data> <incidentchartdashlet name="Incid

我很难用JAXB解析以下xml:

<?xml version="1.0" encoding="utf-8"?>
<dashboardreport name="exampleDashboard" version="6.5.6.1013" reportdate="2016-12-16T11:05:19.329+01:00" description="">
    <data>
        <incidentchartdashlet name="Incident Chart" description="" />
        <chartdashlet name="WebRequestTime" showabsolutevalues="false" />
        <chartdashlet name="WebServiceTime" showabsolutevalues="false" />
    </data>
</dashboardreport>

我使用以下java类来解组xml: Dashboardreport.java

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "dashboardreport")
public class Dashboardreport {

    @XmlElementWrapper(name = "data")
    @XmlElement(name = "chartdashlet")
    protected List<Chartdashlet> chartdashlets;

    @XmlElementWrapper(name = "data")
    @XmlElement(name = "incidentchartdashlet")
    protected List<Incidentchartdashlet> incidentchartdashlets;

    @XmlAttribute(name = "name")
    protected String name;
}
@xmlacessortype(xmlacesstype.FIELD)
@XmlRootElement(name=“dashboardreport”)
公共类仪表板报告{
@xmlementwrapper(name=“data”)
@xmlement(name=“chartdashlet”)
受保护列表小程序;
@xmlementwrapper(name=“data”)
@XmlElement(name=“incidentchartdashlet”)
受保护的意外事件列表;
@XmlAttribute(name=“name”)
受保护的字符串名称;
}
我只想在不使用IncidentChartDashlet和chartdashlet包装类的情况下解组xml,因为这两种类型差别很大。 我只能使用XmlElementWrapper注释一次,因此只有ChartDashlet被填充,IncidentChartDashlet为null。
JAXB有没有不使用单独包装类的解决方案?

我假设dashlet类的定义如下
class Chartdashlet扩展Dashlet
class Incidentchartdashlet扩展Dashlet

那么,处理Dashlet混合列表的首选JAXB方法是 通过使用 注释:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "dashboardreport")
public class Dashboardreport {

    @XmlElementWrapper(name = "data")
    @XmlElements({
        @XmlElement(name = "chartdashlet", type = Chartdashlet.class),
        @XmlElement(name = "incidentchartdashlet", type = Incidentchartdashlet.class)
    })
    protected List<Dashlet> dashlets;

    @XmlAttribute(name = "name")
    protected String name;
} 
@xmlacessortype(xmlacesstype.FIELD)
@XmlRootElement(name=“dashboardreport”)
公共类仪表板报告{
@xmlementwrapper(name=“data”)
@XmlElements({
@XmlElement(name=“chartdashlet”,type=chartdashlet.class),
@XmlElement(name=“incidentchartdashlet”,type=incidentchartdashlet.class)
})
受保护列表dashlet;
@XmlAttribute(name=“name”)
受保护的字符串名称;
} 

我假设dashlet类的定义如下
class Chartdashlet扩展Dashlet
class Incidentchartdashlet扩展Dashlet

那么,处理Dashlet混合列表的首选JAXB方法是 通过使用 注释:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "dashboardreport")
public class Dashboardreport {

    @XmlElementWrapper(name = "data")
    @XmlElements({
        @XmlElement(name = "chartdashlet", type = Chartdashlet.class),
        @XmlElement(name = "incidentchartdashlet", type = Incidentchartdashlet.class)
    })
    protected List<Dashlet> dashlets;

    @XmlAttribute(name = "name")
    protected String name;
} 
@xmlacessortype(xmlacesstype.FIELD)
@XmlRootElement(name=“dashboardreport”)
公共类仪表板报告{
@xmlementwrapper(name=“data”)
@XmlElements({
@XmlElement(name=“chartdashlet”,type=chartdashlet.class),
@XmlElement(name=“incidentchartdashlet”,type=incidentchartdashlet.class)
})
受保护列表dashlet;
@XmlAttribute(name=“name”)
受保护的字符串名称;
} 

谢谢你的帮助,托马斯!你给了我正确的暗示;)即使如此,您将如何从
列表
向下转换到
列表
?@bibliophical
列表
将包含
Chartdashlet
Incidentchartdashlet
项。因此,将其向下转换为
列表
是没有意义的。但是,您可以强制转换单个项目,例如
(Chartdashlet)Dashlet。获取(0)
(当然,在使用Chartdashlet的
实例进行检查之后)。感谢您的帮助,Thomas!你给了我正确的暗示;)即使如此,您将如何从
列表
向下转换到
列表
?@bibliophical
列表
将包含
Chartdashlet
Incidentchartdashlet
项。因此,将其向下转换为
列表
是没有意义的。但是,您可以强制转换单个项,例如
(Chartdashlet)Dashlet.get(0)
(当然,在使用Chartdashlet的
实例检查它之后)。