SOAPについて学んでいます。一部のヘッダー要素には、true または false に設定できる「mustunderstand」属性があります。しかし、石鹸のメッセージを「理解する」とはどういう意味でしょうか? エラーなしで解析するには?実際に説明していない サイトをいくつか見つけました。
誰かが私に何が起こっているのかの概要を教えてもらえますか?
Web サービスを呼び出すには、その契約を尊重する必要があります。Web サービスに<operationA>
and<operationB>
があるのに送信<operationC>
すると、エラー (SOAP 用語での障害) が発生します。
Web サービスには操作が<operationA>
あり、メッセージにまたは<operationB>
が含まれている場合にメッセージをどう処理するかを認識しています。しかし、それを持っていないし、含むメッセージをどうするか分からないので、エラーを返すだけです。不正な本文は無視できませんが、一方でヘッダーには制限がないため、適切に処理するには別のメカニズムが必要です。<operationA>
<operationB>
<operationC>
<operationC>
ヘッダーは、トランザクションのサポート、認証、ルーティングなどを追加してメッセージを拡張するために使用されます。ただし、これらの拡張機能は SOAP 仕様では定義されておらず、ユーザー定義です。仕様は、ヘッダーがそのために使用されることを示しているだけであり、ヘッダーが存在する場合にメッセージをどのように処理する必要があるかも指定しています。このmustUnderstand
属性は、「メッセージの処理方法」の一部です。
SOAP メッセージは、場合によってはメッセージ パスに沿って一連の SOAP 仲介者を通過することによって、発信者から最終的な宛先に移動します。ヘッダーは、特定のノードまたは最終ノード (つまり、SOAP 1.1actor
属性または SOAP 1.2role
属性) をターゲットにすることができ、その場合、ノードはヘッダーで何かを行う必要があります。これは、それを使用することも、無視することもできます。
このmustUnderstand
属性は、ヘッダーの処理がオプションか必須かを示します。これは基本的に、ヘッダーに一致する適切なハンドラーを見つけようとするノードに変換され、その仕様と一致する方法でメッセージの処理を続行します。適切なハンドラが見つからない場合は、エラーを返して以降の処理を停止する必要があります。true/1 の場合mustUnderstand
、ノードはそれを無視できません。
たとえば、ヘッダーがトランザクション セマンティクス用であるとします (つまり、操作がアトミックに実行され、すべて成功またはすべて失敗するように、トランザクション内で呼び出しを実行する必要があります)。処理ノードがトランザクション ヘッダーを認識した場合、そのトランザクションを開始する必要があります。ノードがヘッダーを見たが、それが何であるかわからない場合に何が起こるか想像してみてください。その後、いくつかの操作は失敗し、他の操作は成功し、ロールバックするトランザクションはありません。そのため、アプリケーションは一貫性のない状態になっています。
SOAP の mustUnderstand 属性により、堅牢な進化が可能になります。値が「1」の SOAP mustUnderstand 属性でタグ付けされた要素は、親またはピア要素のセマンティクスを何らかの方法で変更すると推定する必要があります。このように要素にタグ付けすることで、セマンティクスのこの変更が、完全に理解していない人によって暗黙のうちに (そして、おそらく誤って) 無視されることがなくなります。