36.7.1 SOAPヘッダが含まれる場合のハンドラの動作(Webサービス側)
SOAPヘッダが含まれるSOAPメッセージを受信した場合,SOAPヘッダのsoap:mustUnderstand属性の設定値によって,ハンドラの処理が異なります。soap:mustUnderstand属性が"1"の場合,およびsoap:mustUnderstand属性が"1"以外の場合に分けて処理内容を示します。
(1) soap:mustUnderstand属性が"1"の場合
soap:mustUnderstand属性が"1"のSOAPヘッダを持つSOAPメッセージを受信した場合,設定されたハンドラのどれか,またはWebサービス実装クラス内で,そのSOAPヘッダを処理できれば,すべてのハンドラが呼び出されます。
ハンドラでSOAPヘッダを処理できる場合のハンドラの処理を次の図に示します。
この図の例では,要素名tns:headerAを処理できるハンドラ3が設定されているとしています。このとき,tns:headerAのSOAPヘッダを受信した場合,ハンドラ3,ハンドラ2,およびハンドラ1のすべてのハンドラが呼び出されます。
Webサービス実装クラスでSOAPヘッダを処理できる場合のハンドラの処理を次の図に示します。
Webサービス実装クラスだけが要素名tns:headerSを処理できるとした場合も,ハンドラで処理できる場合と同様にすべてのハンドラが呼び出されます。
soap:mustUnderstand属性が"1"のSOAPヘッダを持つSOAPメッセージを受信した場合,次のようなときはfaultcodeにsoap:MustUnderstandが設定されたSOAPフォルトが返されます。
-
設定されたハンドラのどれかがSOAPヘッダを処理できない
-
Webサービス実装クラス内でSOAPヘッダを処理できない
-
プロバイダ実装クラスが使用されている
SOAPヘッダを処理できない場合のハンドラの処理は,次の図のようになります。
(2) soap:mustUnderstand属性が"1"以外の場合
soap:mustUnderstand属性が"1"以外の場合,設定されているすべてのハンドラが呼び出されます。
soap:mustUnderstand属性が"1"以外の場合,ハンドラの処理は次の図のようになります。
この図の例では,ハンドラもWebサービス実装クラスも要素tns:headerZを処理できませんが,soap:mustUnderstand属性が"1"以外の場合はSOAPフォルトにはならないで,すべてのハンドラが呼び出されます。