使用JAXB解组XML时出现ClassCastException

时间:2012-05-18 12:14:03

标签: java xml xsd jaxb unmarshalling

我使用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()));

例外:

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

其他案例的相同代码正确执行并成功反序列化。

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

您可以尝试这样做:

Object o = unmarshaller.unmarshal(...);
System.out.println(o.getClass().getName());