我已经使用IntelliJ Tools > JAXB > Generate Java Code From XML Schema using JAXB从XSD创建了Java对象。
我基本上是试图从XSD生成Java对象,然后将与此XSD兼容的XML读取到Java对象中。
在我的练习中,我使用的是与Credit Transfer Version 1.10相关的six group网站上的XSD。
然而,当我尝试运行以下代码时,我看到一个异常:Java.lang.ClassCastException:javax.xml.bind.JAXBElement不能强制转换
public class Pain001Tester {
public static void main(String[] args) throws IOException {
String fileName = "pain_001_Beispiel_1.xml";
ClassLoader classLoader = new Pain001Tester().getClass().getClassLoader();
File file = new File(classLoader.getResource(fileName).getFile());
//File is found
System.out.println("File Found : " + file.exists());
//Read File Content
String content = new String(Files.readAllBytes(file.toPath()));
System.out.println(content);
JAXBContext jaxbContext;
try
{
jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
ObjectFactory xmlMessage = (ObjectFactory) jaxbUnmarshaller.unmarshal(new StringReader(content));
//ObjectFactory xmlMessage = (ObjectFactory) JAXBIntrospector.getValue(jaxbUnmarshaller.unmarshal(new StringReader(content)));
//JAXBElement<ObjectFactory> userElement = (JAXBElement<ObjectFactory>) jaxbUnmarshaller.unmarshal(new StringReader(content));
//ObjectFactory user = userElement.getValue();
System.out.println(xmlMessage);
}
catch (JAXBException e)
{
e.printStackTrace();
}
}
}
字符串
我认为我的问题与XMLRootElement有关,但不确定是否是这个问题。我知道下面的stackoverflow问题与我的问题很接近,但无法使用stackoverflow案例中突出显示的几个解决方案解决我的问题:No @XmlRootElement generated by JAXB
3条答案
按热度按时间lf3rwulv1#
我假设错误发生在
字符串
jaxbUnmarshaller.unmarshal()不返回ObjectFactoryt类型,因此您不能将结果强制转换为ObjectFactory。它返回与xml文件的根元素对应的生成类的示例。
lawou6xi2#
我想我已经找到了问题所在(Heri先按了按钮,所以他得到了饼干)
我修改了以下内容:
ObjectFactory xmlMessage =(ObjectFactory)JAXB Introspector.getValue(jaxbUnmarshaller.unmarshal(new StringReader(content)));
到
JAXBElement xmlMessage =(JAXBElement)jaxbUnmarshaller.unmarshal(new StringReader(content));
然后,我没有检索对ObjectFactory类的响应,而是使用了JAXB生成的根元素类,它工作了。
我不知道为什么用@XmlRootElement(name =“RootElement”)注解ObjectFactory不起作用,但我现在有了一个可行的解决方案。
u4dcyp6a3#
把你的回答像下面这样
字符串
然后像下面这样从中获取对象
型
上面的例子应该对你有用