TOP書籍連動> SOAP body要素
SOAPの紹介
SOAPの紹介

第2回:WSDLの概要

著者:Alessandro Sfondrini   2006/3/7
前のページ  1  2
SOAP body要素

   body要素はRPCコールやRPCレスポンスを送信したり、エラーを報告したりするのに使用されます。body項目は名前で定義され、有効なnamespaceURI、ローカル名によって構成されます。

   body要素の直接の子要素はnamespace修飾されることもあります。HTTP上にメッセージを送信する場合、コールを送信したり、レスポンスを取得するのにPOSTメソッドを使用すべきです。PHPでは、これにソケット関数を使用することもできます。

   コンテンツタイプは"text/xml"に設定すべきですが、"text/plain"でも動作します。エンコーディングは処理するアプリケーションに依存します。

リスト1
<!-- 最初の部分: SOAPリクエスト -->
<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:GetPrice xmlns:m="Some-URI">
         <Code>Moz-K527</Code>
         <Name>W.A.Mozart, Don Giovanni</Name>
      </m:GetPrice>
   </SOAP-ENV:Body>

</SOAP-ENV:Envelope>


<!-- 2番目の部分: SOAPレスポンス -->
<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:GetPriceResponse xmlns:m="Some-URI">
            <Price>29.90</Price>
         </m:GetPriceResponse>
      </SOAP-ENV:Body>

</SOAP-ENV:Envelope>

   リスト1の最初の部分に、SOAPを使用して実行された、有効なRPCコールの例を示します。このメッセージにはheader要素はありませんが、header 要素は省略可能ですので、問題ありません。body要素を見てみましょう。

   サブ要素であるGetPrice(Some-URIによって定義されています)では、値段を取得するために、製品番号と名前を保持しています。リスト1の2番目の部分には、有効なレスポンスを格納しています。

   これはHTTP headerのない、最低限のXML レスポンスメッセージであることに注意してください(数行は操作が成功したことや、日付やコンテンツの長さなどの追加情報を指定するために、サーバから送信されます)。

   これは基本的なSOAP RPCコールとRPCレスポンスのサンプルです。実際のアプリケーションは、通常多数のサブ要素が配列され、もっと大量のデータを処理するため、非常に複雑になっています。簡潔に説明するために、できるだけこの例を単純なものにしました。


SOAP Fault要素

   リモートアプリケーションの実行中にエラーが起きた場合、プログラムに予期された出力を行わせず、どのようなエラーが生じたのかなど、クライアントに情報を提供することが必要です。

   これはSOAP fault要素の重要な役割です。これはenvelope 要素の子要素であり、body要素の唯一の子要素となります。つまり、body要素にfault 要素をともなう時は、他の情報が渡されないことを意味します。

   fault要素は、その問題の原因を判断するCode と呼ばれる標準エラーコード(例えば、問題の原因が送信者側にあるのか、受信者側にあるのかを判断します)と、どのようなエラーが起こったのか説明するReason(例えば、タイムアウトなどの理由)から主に構成されます。

   それには、SOAPメッセージパス中のどのノードがエラーを引き起こしたか説明するNode要素や、ノードの役割を記述するのに用いられるRole要素など、追加情報を含む場合もあります。さらに、Detail要素は、どのようなエラーが起きたのか詳細に説明したい場合に使用します。

   実際に、これから紹介するアプリケーション内に、fault要素を使用します。


WSDLの概要

   WSDL(Web Services De.nition Language)について簡単に説明します。WSDLを知ることで、Webサービスがどのように動いているか、よりよく理解することができます。WSDLはWeb サービスについて記述するために作成された、XMLベースのドキュメント形式です。

   WSDLの主な目的は、Webサービスのインターフェースに関する情報を提供することです。インターフェースに関する情報がないと、別のプログラムがそのWebサービスを利用することができません。

   WSDLドキュメントは、Webサービスを利用するために必要なすべての情報を含んでいます。例えば、使用する方法、要求されるパラメータ、生成される出力のタイプなどの情報です。このため、WSDLによる記述は、ごく簡単なSOAPメッセージのやり取りを表現する場合でも、かなり長い記述となります。

   もしWSDLについてもっと学びたいという時は、W3C(World Wide Web Consortium)のページであるhttp://www.w3.org/TR/wsdl(日本語訳:http://www.research.ibm.com/trl/projects/xml/SOAP1.1-j-ibm-revision2.html)を参照してください。

前のページ  1  2


Alessandro Sfondrini
著者プロフィール
Alessandro Sfondrini
イタリアのコモ出身の若いプログラマであり、PHPとC言語に関連したWebサービスに興味をもっています。また、近日出版される『php|a Nanobook"Practical Web Services"』の著者です。


INDEX
第2回:WSDLの概要
  SOAP envalope要素
SOAP body要素