2012-05-15 174 views
6

我得到錯誤,同時連接到我的網絡服務:CXF:解組錯誤:意外元素,什麼意思?

javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: unexpected element (uri:"", local:"OrderID"). Expected elements are <{}Login>,<{}CrewId>,<{}OrderID >,<{}OrderNumber >

服務使用org.apache.cxf.transport.servlet.CXFServletjaxws:endpoint註釋曝光。客戶端使用CXF生成。首先,令我感到驚訝的是,我在兩端使用相同的技術,解決方案無法正常工作,其次,這是錯誤消息中的神祕{}。

那麼,怎麼了,怎麼理解這個{}?

回答

10

你注意到了OrderID和'>'之間的空格嗎?預計是<{}OrderID >,您發送"OrderID"。檢查元素名稱中是否沒有空格。

+0

是的,你說得對,我還沒有想過有人在那裏增加了空間。 –

+0

+1爲節省我的時間,因爲您的提示幫助我找到了元素名稱中的拼寫錯誤(而不是額外的空間,只是一個不同的名稱),導致了相同的非常清晰的錯誤消息。 – Withheld

+0

簡單而直接的答案。我讀過很多評論,但這是最好的。 – VJS

15

Have you noted space between OrderID and '>'? Expected is <{}OrderID > and you send >"OrderID". Check if you don't have spaces in your element names.

雖然從斯捷潘Vihor上面的回答幫你得到你所需要的東西,讓我來回答你的是什麼「{}」表示質疑:

這意味着JAX-B Unmarshaller的期待您的OrderID元素沒有名稱空間,即該元素的名稱空間uri需要等於「」。

在這裏看到一個簡短的介紹上XML Namespaces

+0

是的,謝謝你的解釋,這很有幫助。 –

-1

有時你必須指定在WSDL(區分大小寫)所使用的名稱: < {登錄}>,< {} CrewId>,< {}訂單id> ,< {}訂單號碼>

@XmlElement(name = "CrewId") 
protected String crewId; 
@XmlElement(name = "OrderID ") 
protected String orderID; 
@XmlElement(name = "Login") 
protected String login; 
@XmlElement(name = "OrderNumber") 
protected String orderNumber; 
2

@icyitscold,我想從我的經驗添加註釋是 ,你可以改變將elementFormDefault爲「合格」作爲 elementFormDefault="qualified" in xs:schema元素。命名空間將被默認限定。

這是對WSDL優先的方法,如果使用代碼優先方法,你可以考慮添加變化

@javax.xml.bind.annotation.XmlSchema( attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)

0

我得到了同樣的錯誤,

javax.xml.ws.soap.SOAPFaultException: Unmarshalling Error: unexpected element (uri:"", local:"country"). Expected elements are <{}seconds>,<{}month>,<{}hour>,<{}year>,<{}minutes>,<{}day>

然後我在Web服務端找到響應類型添加了一個新的屬性「國家」。

要忽略新添加的屬性,請在'jaxws:client'設置中添加以下propertys。

<jaxws:client id="abc" 
       serviceClass="someClass" 
       address="url"> 
    <jaxws:properties> 
     <entry key="schema-validation-enabled" value="false"/> 
     <entry key="set-jaxb-validation-event-handler" value="false"/> 
    </jaxws:properties> 
</jaxws:client>