4

我已经使用xjc根元素类型为 的 xsdA生成了 java 类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()));

例外:

java.lang.ClassCastException: javax.xml.bind.JAXBElement

其他情况的相同代码可以正确执行并成功反序列化。

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

4

2 回答 2

8

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

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

于 2012-05-18T12:24:19.283 回答
1

您可以尝试这样做:

Object o = unmarshaller.unmarshal(...);
System.out.println(o.getClass().getName());
于 2012-05-18T12:18:51.547 回答