簡體   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