gpt4 book ai didi

java - 什么会导致 @XmlRootElement 类被解码到 JaxbElement 中?

转载 作者:行者123 更新时间:2023-11-30 11:02:42 30 4
gpt4 key购买 nike

我目前正在尝试通过 JAXB 解码 XML 文档。我已经在我的项目中生成了 JAXB 类,并且有一个用 @XmlRootElement 注释的根类。

不幸的是,当我尝试解码时,我收到以下异常:

java.lang.ClassCastException: javax.xml.bind.JAXBElement cannot be cast to a.b.Foo

我的 Foo 类有正确的注释,据我所知,这应该能够将我的 XML 解码到 Foo 类中。

有什么想法会导致这种情况吗?

编辑(澄清):我试图解码的调用是这样的:

Foo foo = (Foo)unmarshaller.unmarshal(input);

第二次更新我不允许更新我们的架构,但下面是“Foo”元素的 XML 架构结构...

<xsd:element name="Foo" type="Foo_Type"/>
<xsd:complexType name="Foo_Type">
<!-- more schema definition here -->
</xsd:complexType>

然后我通过 JAXB 绑定(bind)将 @XmlRootElement annotatino 添加到 Foo 类。我发现如果我将架构更改为这样:

<xsd:element name="Foo">
<xsd:complexType>
<!-- more schema definition here -->
</xsd:complexType>
</xsd:element>

一切正常,但再一次——我们不应该更新架构。

最佳答案

具有 @XmlRootElement 的类注释只应解码为 JAXBElement 的一个实例如果 unmarshal 之一采用 Class 的方法使用参数。


更新

如果您的解码代码如下:

Foo foo = (Foo)unmarshaller.unmarshal(input);

那么你必须有一个@XmlElementDecl在用 @XmlRegistry 注释的类上(默认情况下,当模型是从 XML 模式生成时,此类称为 ObjectFactory)对应于 Foo类(class)。我在我的博客上写了更多关于这个的内容:

关于java - 什么会导致 @XmlRootElement 类被解码到 JaxbElement 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30674272/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com