尝试解组 xml 时的类转换异常?

2022-08-31 17:04:31

尝试在此处通过类转换异常:

FooClass fooClass = (FooClass ) unmarshaller.unmarshal(inputStream);

引发此异常:

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

我不明白这一点 - 因为该类是由xjc.bat工具生成的 - 并且它生成的类我根本没有改变 - 所以这里应该没有转换问题 - unmarshaller应该真的给我一个可以转换为FooClass的类。

关于我做错了什么的任何想法?


答案 1

是否有注释?如果没有,请尝试:FooClassXmlRootElement

Source source = new StreamSource(inputStream);
JAXBElement<FooClass> root = unmarshaller.unmarshal(source, FooClass.class);
FooClass foo = root.getValue();

这是基于非官方的JAXB指南


答案 2

在 JAXBElement 上使用 JAXBIntrospector 来获取模式对象,如>>

JAXBContext jaxbContext = JAXBContext.newInstance(Class.forName(className));
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Object schemaObject = JAXBIntrospector.getValue(unmarshaller.unmarshal(new ByteArrayInputStream(xmlString.getBytes())));

参考:JAXB unmarshaller.unmarshal 何时返回 JAXBElement<MySchemaObject> 或 MySchemaObject?


推荐