では次に、XMLベースとなっているSOAPメッセージの構造を見ていくことにしましょう。以下に示すコードは、実際にSOAPでオブジェクトの呼び出しが行われたときのメッセージの例です。
POST /StockQuote HTTP/1.1 Host: www.stockquoteserver.com Content-Type: text/xml; charset="utf-8" Content-Length: nnnn SOAPAction: "Some-URI" <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:GetLastTradePrice xmlns:m="Some-URI"> <symbol>DIS</symbol> </m:GetLastTradePrice> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
この例では、HTTPを介してSOAPのメッセージが送信されたときのものを示しています。コードそのものでは分かりにくい面もありますので図解したものを以下に示しました。
この構造の中で知っておくとよいのは、エンベロープの構造でしょう。ここに記述された内容は、SOAPメッセージを手紙にたとえると封筒の表書きにあたります。つまり、住所と宛名にあたるSOAPメッセージの届け先のオブジェクトを指定する内容などが記述されているのです。あとは、その要素として記述されているBodyタグ(<SOAP-ENV:Body>)の中に、その手紙の内容が書かれているといった具合です。このBODYの中にオブジェクト呼び出しに必要となるパラメータなどが記述されることになるわけです。XMLベースのメッセージですので、構造化された内容を持っていることもお分かりいただけるでしょう。
このようにしてオブジェクトの呼び出しを実行した際にクライアント側では、SOAPメッセージが組み立てられ、オブジェクトの提供者に対して送信されます。このメッセージを受け取ったオブジェクトの提供者は、SOAPメッセージを解釈し、処理を実行するという段階に入ります。オブジェクトの提供者は、必要な処理を実行した結果をクライアントへ送信しなければなりません。その場合にも SOAPメッセージがクライアント側へ送信されます。そのとき、以下のようなコードとなります。
HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Content-Length: nnnn <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> <SOAP-ENV:Body> <m:GetLastTradePriceResponse xmlns:m="Some-URI"> <Price>34.5</Price> </m:GetLastTradePriceResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
このコードを受け取ったクライアント側は、呼び出し元のアプリケーションに対し、戻り値を与えてやります。そのために、SOAPメッセージを解釈してやる必要が発生します。
このようなSOAPメッセージ交換の取り決めは、現在 W3C(World Wide Web Consortium) にW3C Noteとして提出され、標準化が進められています。また、この仕様を提出したマイクロソフトをはじめ IBMやDevelopMentorといった企業は、それぞれツールや開発環境となるものを提供し始めています。
SOAPは、クロスプラットフォーム間でのオブジェクト呼び出しを実現するためのプロトコル仕様として登場し、注目を浴びています。しかし、単なるオブジェクト呼び出しの手続きを定義しているにすぎないこの仕様がそれほどまでに注目されるのでしょうか。
それは、これらの企業が打ち出しているインターネット時代のアプリケーション構造に対しての戦略にあると考えられます。そのキーワードはWebサービスというものです。SOAPとWebサービス。これらは、どのような関係を持ち、何を実現してくれるのでしょうか。
Copyright © ITmedia, Inc. All Rights Reserved.