使用 IntelliJ 生成代码时 Java java.lang.ClassCastException : javax. xml.bind.JAXBElement 无法转换异常

标签 java xml xsd jaxb

我已使用 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/

相关文章:

java - 如何在 Java 中制作这个 3 列分隔符?

xml - 我的 XSD XML 架构出了什么问题?

xml - 将数据从数据库导出到 XML 文件

android - SwitchCompat 未在设备上显示

java - 将 XML 文档转换为字符串

xml - 错误 : The content of 'persons' must match (annotation? , (simpleType | complexType)?, (unique | key | keyref)*))

java - 我们如何自动检测XML文件中的XSD模式文件?

java - 连接类别组合框和子类别组合框

java - 在.jnlp中指定临时目录

java - 如果字段是另一个类,则访问 jSTL 中类的字段