试图通过这里的类投射异常:
FooClass fooClass = (FooClass ) unmarshaller.unmarshal(inputStream);
Run Code Online (Sandbox Code Playgroud)
抛出此异常:
java.lang.ClassCastException: javax.xml.bind.JAXBElement
Run Code Online (Sandbox Code Playgroud)
我不明白这个 - 因为这个类是由xjc.bat工具生成的 - 它生成的类我根本没有改变 - 所以这里应该没有转换问题 - unmarshaller应该真的给我一个类可以投射到FooClass.
关于我做错了什么的任何想法?
Jon*_*eet 112
是否FooClass
有XmlRootElement
注释?如果没有,请尝试:
Source source = new StreamSource(inputStream);
JAXBElement<FooClass> root = unmarshaller.unmarshal(source, FooClass.class);
FooClass foo = root.getValue();
Run Code Online (Sandbox Code Playgroud)
这是基于非官方的JAXB指南.
Rah*_*kur 16
在JAXBElement上使用JAXBIntrospector来获取类似>>的schemaObject
JAXBContext jaxbContext = JAXBContext.newInstance(Class.forName(className));
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Object schemaObject = JAXBIntrospector.getValue(unmarshaller.unmarshal(new ByteArrayInputStream(xmlString.getBytes())));
Run Code Online (Sandbox Code Playgroud)
请参阅:JAXB unmarshaller.unmarshal何时返回JAXBElement <MySchemaObject>或MySchemaObject?
Gau*_*v B 15
我今天遇到了同样的问题,在这里看到了答案,做了一些研究,并期待我最通用的解决方案是使用JAXBIntrospector.因此 -
FooClass fooClass = (FooClass ) unmarshaller.unmarshal(inputStream);
Run Code Online (Sandbox Code Playgroud)
应该写成
FooClass fooClass = (FooClass) JAXBIntrospector.getValue(unmarshaller.unmarshal(inputStream));
Run Code Online (Sandbox Code Playgroud)
或者甚至更好,使它更通用 -
T t = (T) JAXBIntrospector.getValue(unmarshaller.unmarshal(inputStream));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
80880 次 |
最近记录: |