什么可以导致@XmlRootElement类被解组到JaxbElement中?

时间:2015-06-05 19:23:55

标签: java xml jaxb jaxbelement

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

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

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

My 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 Bindings将@XmlRootElement annotatino添加到Foo类。我发现如果我将模式更改为:

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

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

1 个答案:

答案 0 :(得分:1)

如果使用@XmlRootElement参数中的JAXBElement方法之一,则只有unmarshalClass实例才会对具有Foo foo = (Foo)unmarshaller.unmarshal(input); 注释的类进行解组。

更新

如果您的解组代码如下:

@XmlElementDecl

然后,对于使用@XmlRegistry注释的类,必须有ObjectFactory(默认情况下,当从XML模式生成模型时,此类称为Foo)对应于{{ 1}}类。我在我的博客上写了更多相关内容: