我在不同的命名空间下有10个模式,每个模式都有一个complexType和相关元素,它替换了一个名为“Report”的元素,例如:
<xsd:element name="MyReport" type="foo:MyReportType" substitutionGroup="bar:Report"/>
<xsd:element name="Report" abstract="true"/>
当我解组包含所有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版本),两者都无济于事。看来,substitutionGroup被忽略了。任何帮助将不胜感激!
答案 0 :(得分:1)
尝试以这种方式创建JAXB上下文:JAXBContext.newInstance("package1:package2:package3:...")
其中packageX
是您的ObjectFactories所在的包。