2017-10-13 9 views
0

私はJAXBと、次のXMLをパースでstuckedだ:JAXB:異なる種類のオブジェクトのリストをラッパー内でアンマーシャリングする方法はありますか

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

私は、XMLを非整列化するために、次のJavaクラスを使用: 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; 
} 

は、私はちょうど、XMLを非整列化したいですインシデントチャートのダッシュおよびチャートダッシュレットの周りのラッパークラスを使用せずに、両方のタイプが異なることが原因です。 XmlElementWrapperアノテーションは一度しか使用できないため、チャートダッシュが埋められ、インシデントチャートのダッシュがnullになります。 別のラッパークラスを使用せずにJAXBのソリューションはありますか?

答えて

1

あなたのダッシュレットクラスは class Chartdashlet extends Dashletclass Incidentchartdashlet extends Dashletのように定義されています。あなたの助け、トーマス用

@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; 
} 
+0

ありがとう:

その後、ダッシュレットのあなたの混合リストを処理するための優先JAXBの方法は、@XmlElements 注釈を使用して だろう!あなたは私に正しいヒントをくれました;) –

関連する問題