2

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

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

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

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

关于可能导致这种情况的任何想法?

编辑(澄清):我试图对 unmarshal 进行的调用是这样的:

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 绑定将 @XmlRootElement annotatino 添加到 Foo 类。我发现如果我将架构更改为这样:

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

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

4

1 回答 1

1

如果使用了带参数的方法之一,则应仅将具有@XmlRootElement注释的类解组为实例。JAXBElementunmarshalClass


更新

如果您的解组代码如下:

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

然后,您必须有一个与该类对应的类(默认情况下,当从 XML Schema 生成模型时调用@XmlElementDecl该类)注释的类。我在我的博客上写了更多关于此的内容:@XmlRegistryObjectFactoryFoo

于 2015-06-05T19:26:15.740 回答