2

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 として指定するだけで、ヘッダーをリクエストから除外できるという主張があります。

4

1 に答える 1

1

さらに掘り下げて数人の人と話をした後、私は自分の質問に答えることができました。SOAP メッセージ ハンドラーを使用して、削除するヘッダー名のリストを渡すことができ、存在する場合はそれらが要求から削除されます。このサイトは、私を正しい軌道に乗せるために非常に貴重でした:

http://technology.amis.nl/blog/12004/how-to-remove-unwanted-soap-header-elements-in-jax-ws

于 2011-11-24T23:30:58.023 に答える