カスタム ヘッダーを含む SOAP ベースの Web サービスの WSDL があります。
<message name="Request">
<part element="common:Request" name="Request"></part>
<part element="common:myHeader" name="Header"></part>
</message>
<operation name="processRequest">
<soap:operation soapAction=""/>
<input>
<soap:body parts="Request" use="literal"/>
<soap:header message="tns:Request" part="Header" use="literal"></soap:header>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
ヘッダー タイプは、別のスキーマ ファイルで定義されます。
<xs:element name="myHeader" nillable="false" type="tns:myHeaderType"/>
<xs:complexType name="myHeaderType">
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="JobID" type="tns:JobIDType" minOccurs="1" maxOccurs="1"/>
<xs:element name="TransactionID" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
さらに、必要な要素が存在すること、フォーマットの制約が満たされていることなどを確認するために、 の定義に対して検証を行っていますmyHeaderType
。整形式のリクエストは受け入れられ、不適切なフォーマットのリクエストは拒否されるという点で、これはすべて正しく機能しているように見えます。
私の問題は、Apache Axis (プロプライエタリ ツールの背後に隠されている) を使用して Web サービス クライアントを生成するコンシューマで発生します。別の StackOverflow question hereで説明されているように、Axis は myHeader にいくつかのオプションの属性を挿入します。これは SOAP 標準で許可されています (私が知る限り):
<soapenv:Header>
<com:myHeader soapenv:mustUnderstand="0" soapenv:actor="">
^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^
<JobID>myJobId</JobID>
<TransactionID>myTransactionId</TransactionID>
</com:myHeader>
</soapenv:Header>
私の消費者が使用しているツールのため、他の場所で提案されているように、Axis によって生成されたスタブを変更してこれらの属性を省略することは現実的ではありません。さらに、石鹸サービスであると主張する場合、これらの属性は私のサービスで許可されているようです。私の質問は、これらのオプションの属性に対応するためにヘッダー定義をどのように変更し、理想的には予期しない可能性のある属性を計画できるかということです。ヘッダー型の定義に拡張できる標準型はありますか、またはこの状況の一般的なベスト プラクティスはありますか?