SOAP (以前は Simple Object Access Protocol と呼ばれていました) は、非集中型の分散環境での情報交換を目的とする単純なプロトコルです。SOAP メッセージは、送信者から受信者に情報を伝送するための手段です。SOAP メッセージは、要求/応答パターンを実行するために組み合わせて使用することができます。
SOAP は、トランスポートに依存しませんが、最も一般的な方法としては、既存のインターネット・インフラストラクチャーを使用して実行できるように、HTTP を介して伝送されます。SOAP は、メッセージ・ルーティングのためのメッセージ・パスを定義することよって、ディスカバーされた Web サービスをバインディングしたり、使用したりできるようにします。SOAP は Web サービスの UDDI の照会に使用されます。
Java™ API for XML Web Services (JAX-WS) 標準は、SOAP 1.1 と SOAP 1.2 の両方をサポートする機能を導入しています。WebSphere® Application
Server V7.0 以降または WebSphere Application
Server Liberty Profile がインストールされている場合、ワークベンチでは SOAP 1.1 および SOAP 1.2 がサポートされます。
SOAP 1.1
SOAP 1.1 は、プロトコルに依存しないトランスポート・プロトコルであり、各種のプロトコルと組み合わせて使用することができます。WebSphere Application Server で開発および実装される Web サービスでは、SOAP は HTTP、HTTP 拡張フレームワーク、および Java Message Service (JMS) と組み合わせて使用されます。また、SOAP は、オペレーティング・システムにも依存せず、どのようなプログラム言語にもコンポーネント・テクノロジーにも縛られません。クライアントが XML メッセージを発行できる限り、どのようなテクノロジーを使用してそのクライアントを実装するかは問題になりません。同様に、サービスで SOAP メッセージを処理できる限り、任意の言語を使用してそのサービスを実装することができます。また、サーバー・サイドとクライアント・サイドの両方を任意の適切なプラットフォームに配置することができます。
SOAP は、各メッセージの以下の 3 つの部分を定義する XML ベースのプロトコルです。
- エンベロープ。エンベロープは、メッセージに何が含まれており、どのようにしてそれを処理するかを記述するためのフレームワークを定義します。SOAP メッセージは、いくつかのヘッダー (ヘッダーがない場合もあります) と 1 つのボディを含むエンベロープです。エンベロープ
は、XML 文書の最上位要素であり、制御情報、メッセージのアドレス、およびメッセージ自体のためのコンテナーを
提供します。ヘッダーは、サービス品質属性など、あらゆる制御情報を移送します。ボディには、メッセージの ID およびそのパラメーターが含まれます。ヘッダーとボディは、両方とも、エンベロープの子要素です。
- エンコード規則。エンコード規則セットは、アプリケーション定義のデータ型のインスタンスを表します。エンコード規則は、アプリケーション定義のデータ型のインスタンスの交換に使用できるシリアライゼーション・メカニズムを定義します。SOAP は、XSD と、このモデルに従って定義されるすべてのデータ型に関するエンコード規則に基づき、プログラミング言語に依存しないデータ型スキーマを定義します。SOAP エンコードは、WS-I に準拠していないため、リテラル使用 (つまり、エンコードなし) が Web サービスのインターオペラビリティーのために推奨され、また、WS-I への準拠のためには必須になります。
- コミュニケーション・スタイル。コミュニケーションは、リモート・プロシージャー・コール (RPC) に従って実行することも、メッセージ指向 (文書) のフォーマットに従って実行することもできます。
SOAP は以下の 2 つの異なるコミュニケーション・スタイルをサポートします。
- リモート・プロシージャー・コール (RPC): RPC は、結果を返す操作を呼び出します。RPC は、通常、SOAP エンコード (WS-I 非準拠) と一緒に使用されます。
- 文書スタイル: 文書スタイルは、文書指向のスタイルまたはメッセージ指向のスタイルとも呼ばれています。このスタイル
は、より深い層の抽象化を提供し、より多くのプログラミング作業を必要とします。
分散コンピューティング環境では、アプリケーションで定義されるデータ値と特定のプロトコル・フォーマットとの間で行われる変換の方法をエンコード・スタイルによって定義します。この変換プロセスを、シリアライゼーションおよびデシリアライゼーションといいます。SOAP 1.1 仕様では、SOAP エンコード・スタイルを次のように定義しています。
- SOAP エンコード: SOAP エンコード・スタイルは、SOAP データ・モデルから得られるデータ型の値のシリアライゼーションおよびデシリアライゼーションを可能にします。このエンコード・スタイルは、SOAP 1.1 規格で規定され、WS-I には準拠していません。
WSDL では、リテラル XML エンコード・スタイルを次のように定義しています。
- リテラル XML: リテラルとは、文書がそのまま、つまり、エンコードされずに、読み込まれることを表します。文書は XMI としてシリアライズされます。つまり、メッセージ XML は WSDL で記述されたスキーマに準拠します。リテラル・エンコードを使用した場合、各メッセージ・パーツは具体的なスキーマ定義を参照します。リテラル・エンコードは WS-I に準拠しています。
SOAP 1.2
SOAP 1.2 仕様も World Wide Web Consortium (W3C) 勧告であり、このワークベンチに含まれているツールは SOAP 1.2 に示されている規格に準拠しています。SOAP 1.2 仕様は、3 つのパートと、いくつかの表明およびテストのコレクションから構成されています。
SOAP 1.2 は、SOAP 処理モデルについてより具体的な定義を示しています。そのため、Web Services-Interoperability (WS-I) プロファイルがない場合にインターオペラビリティーの問題を招く可能性がある、あいまいな表現の多くが解消されています。SOAP 1.2 を採用することで、異なるベンダー間での SOAP 1.2 の実装に伴うインターオペラビリティーの問題が発生する可能性が少なくなります。
SOAP 1.2 仕様におけるより重要な変更点として、以下のものがあります。
- ベンダーが SOAP 1.2 で規定されているバインディング・フレームワークに準拠していれば、HTTP プロトコル以外のトランスポート・プロトコルを正式的に定義できるようになりました。HTTP は、ユビキタスですが、トランスポートの面では TCP/IP や MQ などに比べると信頼性は高くありません。
- SOAP 1.2 は XML Information Set (XML Infoset) に基づいています。この情報セットは、XSD スキーマを使用して XML 文書を記述する手段を提供しますが、必ずしも XML 1.0 シリアライゼーションを使用して文書をシリアライズするわけではありません。SOAP 1.1 は XML 1.0 シリアライゼーションに基づいています。この情報セットによって、バイナリー・プロトコル・フォーマットなどのような他のシリアライゼーション・フォーマットを簡単に使用できるようになります。バイナリー・プロトコル・フォーマットを使用すると、詳細なタグ情報の一部が不要になることなどにより、メッセージを非常にコンパクトにすることができます。