Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么会导致@XmlRootElement类被解组到JaxbElement中?_Java_Xml_Jaxb_Jaxbelement - Fatal编程技术网

Java 什么会导致@XmlRootElement类被解组到JaxbElement中?

Java 什么会导致@XmlRootElement类被解组到JaxbElement中?,java,xml,jaxb,jaxbelement,Java,Xml,Jaxb,Jaxbelement,我目前正试图通过JAXB解组一个XML文档。我已经在我的项目中生成了JAXB类,并且有一个用@XmlRootElement注释的根类 不幸的是,当我尝试解组时,我收到以下异常: java.lang.ClassCastException: javax.xml.bind.JAXBElement cannot be cast to a.b.Foo 我的Foo类具有适当的注释,据我所知,这应该能够将我的XML解组到Foo类中 你有没有想过是什么原因造成的 编辑(澄清): 我试图打给unmarshal的

我目前正试图通过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>


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

如果使用了采用
class
参数的
unmarshal
方法之一,则带有
@XmlRootElement
注释的类只应解组到
JAXBElement
的实例


更新 如果解组代码如下所示:

Foo foo = (Foo)unmarshaller.unmarshal(input);
然后,在用
@XmlRegistry
注释的类上必须有一个
@xmlementdecl
(默认情况下,当模型从XML架构生成时,该类称为
ObjectFactory
)对应于
Foo
类。我在我的博客上写了更多关于这方面的内容:


我更新了原来的帖子,以澄清我是如何给解密者打电话的。我没有传递类参数,只传递XML输入。还有什么会导致返回JAXBElement?谢谢您的更新。我查看了我的ObjectFactory类,确实看到createFoo()类的方法上有一个@XmlElementDecl注释。但是,也只有一个POJO createFoo()方法。有没有办法防止JAXB类生成创建返回JAXBElement对象的createFoo()?