我已使用 IntelliJ Tools > JAXB > 使用 JAXB 从 XML 架构生成 Java 代码...从 XSD 创建了 Java 对象...
我基本上是尝试从 XSD 生成 Java 对象,然后将符合该 XSD 的 XML 读取到 Java 对象中。
对于我的练习,我使用来自与 Credit Transfer 版本 1.10 相关的六组网站的 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
最佳答案
我假设错误发生在
ObjectFactory xmlMessage = (ObjectFactory) jaxbUnmarshaller.unmarshal(new StringReader(content));
jaxbUnmarshaller.unmarshal() 不返回 ObjectFactoryt 类型,因此您无法将结果强制转换为 ObjectFactory。它返回生成的类的实例,该实例对应于 xml 文件的根元素。
关于使用 IntelliJ 生成代码时 Java java.lang.ClassCastException : javax. xml.bind.JAXBElement 无法转换异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60467701/