繁体   English   中英

JAXB没有将xml的任何元素解组为JAXBElement

[英]JAXB not unmarshalling xml any element to JAXBElement

我有一个网络服务电话。 在我的响应中,当我尝试将xml中的any元素放入JAXBElement时,它会抛出错误。

在模式中我有:

<xs:complexType name="InputType">
    <xs:annotation></xs:annotation>
    <xs:sequence>           
        <xs:element name="Id" type="xs:string" />
        <xs:any namespace="##any" processContents="lax" minOccurs="0" />
    </xs:sequence>
</xs:complexType>

我正在使用的代码:

Object obj = inputType.getAny();
Object o = ((JAXBElement)obj).getValue(); 

此行抛出错误: org.apache.xerces.dom.ElementNSImpl incompatible with javax.xml.bind.JAXBElement soap ui中的org.apache.xerces.dom.ElementNSImpl incompatible with javax.xml.bind.JAXBElement错误org.apache.xerces.dom.ElementNSImpl incompatible with javax.xml.bind.JAXBElement

为什么它不转换为JAXBElement? 我如何使其工作?

如果使用以下内容对属性进行批注,则内容将映射为DOM节点:

@XmlAnyElement

如果设置了lax = true标志,则已知元素将转换为域对象:

@XmlAnyElement(lax=true)

有关@XmlAnyElement的更多信息,请参阅:


更新#1

使用lax = true,您可以获得域对象和DOM节点的混合。 以下是来自java文档:

当真的

如果为true,当一个元素与标记为XmlAnyElement的属性匹配时,JAXBContext就知道了(例如,有一个具有相同标记名称的XmlRootElement的类,或者具有相同标记名称的XmlElementDecl),unmarshaller将急切地解组此元素到JAXB对象,而不是将其解组为DOM。 此外,如果元素未知但它具有已知的xsi:类型,则unmarshaller急切地将元素解组为JAXBElement,其中未知元素名称和JAXBElement值设置为已知xsi:类型的JAXB映射的实例。

结果,在解组后,财产可能变得异质; 它可以同时拥有DOM节点和一些JAXB对象。


更新#2

最终解决问题:

  1. 由于该属性可能包含DOM节点,因此您的代码应通过执行某些类型检查来解释这种可能性。
  2. 要减少接收的DOM节点数量,您需要将这些片段的可能根元素与Java类相关联。 这是通过使用@XmlRootElement(name =“foo”,namespace =“bar”)或@XmlElementDecl注释类来完成的。

查看我的博客中的示例:

根据您的架构验证您的xml。 这应该是第一件要检查的事情

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM