私はJava Webサービスを持っています。apache-cxf を使用して wsdl を生成します。他の開発者は、生成された wsdl を使用して、特定の会計プログラムでクライアントを作成します。
このクライアントが Web メソッドを呼び出そうとすると、アンマーシャリング エラーが表示されます。soap メッセージに予期しない名前空間が含まれています。
org.apache.cxf.interceptor.Falut Unmarshalling Error: unexpected element(uri:"my.namespace.here", local:"documentNumber"). Expected elements are <{}id>,<{documentNumber}>,{here list of other DTO fields}.
想定されるリクエストの例
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<m:publicInnerInvoiceDocument xmlns:m="my.namespace.here">
<arg0>
<documentNumber>String</documentNumber>
</arg0>
</m:publicInnerInvoiceDocument>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Altova xml spy - wsdl 記述を使用してリクエストを作成するためのツールを使用して、このメッセージを受け取りました。私のサービスはそれでうまくいきます。
他のクライアントから受け取ったメッセージの例
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body>
<m:publicInnerInvoiceDocument xmlns:m="my.namespace.here">
<arg0 xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="">
<m:documentNumber>000001</m:documentNumber>
</arg0>
</m:publicInnerInvoiceDocument>
</soap:Body>
</soap:Envelope>
クライアント開発者は、リクエストの作成を制御するツールがないと言っています。彼が使用するプラットフォームは、自動的に実行し、間違って実行します。
それを修正するための私の最善のアイデアは、@HandlerChain を使用して石鹸を処理し、得た石鹸メッセージを修正することです。それが可能かどうかさえわかりません。
私はそれが好きではありません。他にアイデアはありますか?Web サービスの説明が間違っている可能性がありますか?