我使用 xsd 中的 xjc 生成了 java 类,其中根元素是 A 类型的 AType

jaxb 生成的根元素是 AType 并且没有生成 A 类。

当我尝试解码对应于该 xsd 的 xml 并强制转换 JaxbElement 时,它会抛出一个强制转换异常:

片段:
JAXBContext jaxbContext = JAXBContext.newInstance(Class.forName("AType"));
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
AType aType = (AType) unmarshaller.unmarshal(new ByteArrayInputStream(xmlString.getBytes()));

异常(exception):
java.lang.ClassCastException: javax.xml.bind.JAXBElement
其他情况的相同代码正确执行并成功反序列化。

我怎样才能找到 unmarshal() 给我什么类型的对象?我不知道在这种情况下出了什么问题,我尝试打印出 jaxbElement 中的字段,但它不是很有用!

最佳答案

如果根元素的类(此处:AType)不包含 XmlRootElement -annotation,则返回的根元素将被包装在 JAXBElement 中,您必须使用其 getValue() -method 来获取根元素。

AFAIK,如果根元素的类型是匿名类型,XJC 只会生成 XmlRootElement 注释。

10-06 09:43