當我有下不同的命名空間10點的模式,每一個的complexType和相關聯的元件,其爲所謂的「報告」的元素的取代,例如不工作<xsd:element name="Report" abstract="true"/>
JAXB繼承解組
當我解組已經在所有10份報告的XML文檔,只有5當我做了以下發現:
JAXBContext context = JAXBContext.newInstance("com.foo.bar");
Unmarshaller unmarshaller = context.createUnmarshaller();
//get root node of xml
JAXBElement<ReportPackage> package = unmarshaller.unmarshal(new StreamSource(new File("example.xml")));
ReportPackage rp = package.getValue();
ReportSection reports = rp.getReports();
List<JAXBElement<?>> reportList = reports.getReport();
//iterate through the 10 reports
for (int i = 0; i < reportList.size(); i++) {
JAXBElement rep = reportList.get(i);
...
}
這與xml中的報告順序或報告數量無關。 10種類型報告中的5種始終可以找到。我已經使用JAXB的參考實現2.24u1和2.1.10(JDK 6版本),都無濟於事。看起來替換組被忽略。任何幫助將非常感激!
報告中只有特定類型的子類沒有解組嗎?是com.foo.bar jaxb.index或ObjectFactory中Report的所有子類嗎? – padis
只有某些類型的「報告」未被解組。每種報告類型都在其自己的名稱空間中。例如, 'com.foo.bar.report1.Myreport1' 'com.foo.bar.report2.Myreport2' – michael
Report的子類的相同類型(5/10)不會每次解組。 Report的每個子類都有其自己的名稱空間,模式和ObjectFactory類。 「ReportPackage」模式將所有這些不同的報告結合在一起,每個報告都可以替代抽象的「報告」元素。 ReportPackage有一個ObjectFactory類,它包含一個'createReport(Object obj)'方法。 – michael