我正在使用JAXB,无法弄清楚为什么我的嵌套对象没有被解组。我正在通过XJC命令生成类。使用JAXB解组嵌套对象
例如,当我解组Works集合对象时,Composers集合总是包含一个Composer实例将一个NULL名称。
我的XML看起来是这样的:
<Works>
<Work>
<Composer>
<Name>Test Name</Name>
</Composer>
</Work>
</Works>
和XSD是这样的:
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
jxb:version="2.0" xmlns:tns="http://www.example.org/test/"
targetNamespace="http://www.example.org/test/">
<element name="Works" type="tns:Work"></element>
<complexType name="Work">
<sequence>
<element name="Composers" type="tns:Composer" maxOccurs="unbounded"
minOccurs="1">
</element>
</sequence>
</complexType>
<complexType name="Composer">
<sequence>
<element name="Name" type="string">
</element>
</sequence>
</complexType>
而且我的代码,做解组:
JAXBContext jc = JAXBContext.newInstance("mypackagename");
Unmarshaller um = jc.createUnmarshaller();
Works works = (Works)um.unmarshal(new FileReader("src/main/resources/works.xml"));
Work work = works.getWorks().get(0);
Composer composer = work.getComposers().get(0);
System.out.println(composer.getName());
名称始终为NULL,即使我知道它有价值。
我认为XML实例,应该是'测试 '每xsd,而不是像你提到的那个 –
Cratylus
对不起,我的部分有轻微的错字,当我检索作曲家时,它会是work.getComposers()not works.getCompose r() - 我修改了代码。 – seedhead
@seedhead - 您已将Works元素定义为“Work”类型,不包含元素“Work”。 –