Webサービスへの接続中にエラーが発生します:
javax.xml.ws.soap.SOAPFaultException:アンマーシャリングエラー:予期しない要素(uri: ""、local: "OrderID")。必要な要素は、<{} Login>、<{} CrewId>、<{} OrderID>、<{} OrderNumber>です。
サービスは、org.Apache.cxf.transport.servlet.CXFServlet
およびjaxws:endpoint
アノテーションを使用して公開されます。クライアントはCXFを使用して生成されます。第一に、私が驚いたのは、両端で同じテクノロジーを使用していて、ソリューションが機能していないことです。第二に、エラーメッセージのこの不思議な{}です。
では、何が問題で、この{}をどのように理解するのでしょうか。
OrderID
と '>'の間のスペースに注意しましたか?期待されるのは<{}OrderID >
で、"OrderID"
を送信します。要素名にスペースが含まれていないかどうかを確認してください。
OrderIDと '>'の間のスペースに注意しましたか? <{} OrderID>が必要であり、> "OrderID"を送信します。要素名にスペースが含まれていないかどうかを確認してください。
Stepan Vihorからの上記の回答は、必要なものを取得するのに役立ちましたが、「{}」の意味についての質問に答えさせてください。
これは、JAX-B UnmarshallerがOrderID要素に名前空間がないことを期待していることを意味します。つまり、その要素の名前空間uriは ""と等しい必要があります。
XML名前空間 の簡単な紹介については、こちらをご覧ください
@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)
同じエラーが発生しました、
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>