我目前正在尝试通过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>
一切正常,但又一次 - 我们不应该更新架构。
答案 0 :(得分:1)
如果使用@XmlRootElement
参数中的JAXBElement
方法之一,则只有unmarshal
个Class
实例才会对具有Foo foo = (Foo)unmarshaller.unmarshal(input);
注释的类进行解组。
如果您的解组代码如下:
@XmlElementDecl
然后,对于使用@XmlRegistry
注释的类,必须有ObjectFactory
(默认情况下,当从XML模式生成模型时,此类称为Foo
)对应于{{ 1}}类。我在我的博客上写了更多相关内容: