jax-ws 生成コードを使用してクライアントを作成しています。使用される WSDL は、バインディング要素内で、次のように多数のヘッダー要素を指定します。
<wsdl:operation name="operation">
<wsoap12:operation soapActionRequired="false" style="document"/>
<wsdl:input>
<wsoap12:header message="tns:InMsg" part="header1" use="literal"/>
<wsoap12:header message="tns:InMsg" part="header2" use="literal"/>
<wsoap12:header message="tns:InMsg" part="header3" use="literal"/>
<wsoap12:header message="tns:InMsg" part="header4" use="literal"/>
<wsoap12:header message="tns:InMsg" part="header5" use="literal"/>
<wsoap12:body parts="request" use="literal"/>
</wsdl:input>
<wsdl:output>
<wsoap12:header message="tns:OutMsg" part="header1" use="literal"/>
<wsoap12:header message="tns:OutMsg" part="header2" use="literal"/>
<wsoap12:body parts="response" use="literal"/>
</wsdl:output>
<wsdl:fault name="standardError">
<wsoap12:fault name="standardError" use="literal"/>
</wsdl:fault>
</wsdl:operation>
私の質問は、議論のために、header5
. 私が取り組んでいる仕様によると、これはオプションの値です。header5
そのため、JAX-WS を使用してクライアントを生成し、要求に追加される値の操作パラメーターとして null (指定されていない値をシミュレートするため) または有効なヘッダー値を渡す必要があります。<header5>
これにより、子要素を持たない要素が作成されます。次に発生する問題は、消費するサービスがそのヘッダー要素に対して何らかの検証を行っているように見え、通常はいくつかの異なる子要素が含まれているため、不正な形式であると判断することです。
そのため、JAX-WS を使用して、SOAP 要求からヘッダー要素をすべて除外することで、このオプションのヘッダー要件を本質的に満たす方法はありますか? これが WSDL で定義された契約に違反し、サービスがエラーを返す原因になるかどうかについて、私の同僚の間でいくつかの論争があるようです。.Net クライアントでは、ヘッダーを null として指定するだけで、ヘッダーをリクエストから除外できるという主張があります。