web-dev-qa-db-ja.com

CXF:アンマーシャリングエラー:予期しない要素、{}はどういう意味ですか?

Webサービスへの接続中にエラーが発生します:

javax.xml.ws.soap.SOAPFaultException:アンマーシャリングエラー:予期しない要素(uri: ""、local: "OrderID")。必要な要素は、<{} Login>、<{} CrewId>、<{} OrderID>、<{} OrderNumber>です。

サービスは、org.Apache.cxf.transport.servlet.CXFServletおよびjaxws:endpointアノテーションを使用して公開されます。クライアントはCXFを使用して生成されます。第一に、私が驚いたのは、両端で同じテクノロジーを使用していて、ソリューションが機能していないことです。第二に、エラーメッセージのこの不思議な{}です。

では、何が問題で、この{}をどのように理解するのでしょうか。

7
Danubian Sailor

OrderIDと '>'の間のスペースに注意しましたか?期待されるのは<{}OrderID >で、"OrderID"を送信します。要素名にスペースが含まれていないかどうかを確認してください。

13
Stepan Vihor

OrderIDと '>'の間のスペースに注意しましたか? <{} OrderID>が必要であり、> "OrderID"を送信します。要素名にスペースが含まれていないかどうかを確認してください。

Stepan Vihorからの上記の回答は、必要なものを取得するのに役立ちましたが、「{}」の意味についての質問に答えさせてください。

これは、JAX-B UnmarshallerがOrderID要素に名前空間がないことを期待していることを意味します。つまり、その要素の名前空間uriは ""と等しい必要があります。

XML名前空間 の簡単な紹介については、こちらをご覧ください

18
icyitscold

@icyitscold、私の経験から追加したいコメントは、elementFormDefaultを_elementFormDefault="qualified"_要素の_xs:schema_として「修飾」に変更できるということです。名前空間はデフォルトで修飾されます。

これはWSDLファーストのアプローチの場合です。コードファーストのアプローチを使用する場合は、次のように変更を追加することを検討してください。

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

2
chenrui

同じエラーが発生しました、

javax.xml.ws.soap.SOAPFaultException:アンマーシャリングエラー:予期しない要素(uri: ""、local: "country")。予想される要素は、<{}秒>、<{}月>、<{}時間>、<{}年>、<{}分>、<{}日>です。

次に、Webサービス側で、応答タイプに新しいプロパティ「country」が追加されていることがわかりました。

新しく追加されたプロパティを無視するには、「jaxws:client」設定に次のプロパティを追加します。

<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>
1
Sonic.S.Xiang