| ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot |
WSDL の作成方法について理解するSCA for PHP は、@service アノテーションの後に @binding.soap アノテーションを含むコンポーネントについての WSDL を作成します。WSDL を作成するために、SCA はコンポーネントの情報を取得し、各 public メソッドの @param アノテーションおよび @return アノテーションの内容を調べます。 また、コンポーネント内の @types アノテーションの内容も調べます。 @param アノテーションおよび @return アノテーションからの情報を基にして、 WSDL の <types> セクションを構築します。また、@types アノテーションによる別のスキーマファイルの指定は、WSDL 内の <import> 要素に変換されます。 <service> 要素の location 属性WSDL の最後は <service> 要素で、 この要素の location 属性によってサービスの URL を表します。 たとえば、次のようになります。
例1 location 属性 <service name="ConvertedStockQuote" ... location="http://localhost/ConvertedStockQuote/ConvertedStockQuote.php"/> この location は、ウェブサーバーのドキュメントルートからの相対位置であることに注意しましょう。 事前に解決することはできません。コンポーネントがウェブサーバー上の適切な場所に配置され、 ホスト名やポート番号がわかった時点ではじめて解決することができます。 WSDL を要求した URL からの情報を使用します。つまり、たとえば http://www.example.com:1111/ConvertedStockQuote/ConvertedStockQuote.php?wsdl へのリクエストの応答として WSDL が作成されたとすると、 WSDL の location 属性には http://www.example.com:1111/ConvertedStockQuote/ConvertedStockQuote.php が挿入されます。 WSDL および位置パラメータをラップするドキュメント/リテラルSCA for PHP が作成する WSDL は、ドキュメント/リテラル でラップした形式となります。これは、パラメータを囲い込んで 'ラッパー' メソッド型として返すものです。この型は、 対応するメソッドの名前となります。WSDL の先頭にある <types> 要素で、これらのラッパーを定義します。 ConvertedStockQuote のサンプルにおける getQuote() メソッドを考えてみましょう。
例2 ふたつの引数を持つメソッド
<?php このメソッドの WSDL は、メソッドとパラメータの名前を定義します。 また、パラメータに対応する XML スキーマ型を提供します。 WSDL の types セクションは、このようになります。
例3 パラメータ名を表す types セクション <types> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ConvertedStockQuote"> <xs:element name="getQuote"> <xs:complexType> <xs:sequence> <xs:element name="ticker" type="xs:string"/> <xs:element name="currency" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="getQuoteResponse"> <xs:complexType> <xs:sequence> <xs:element name="getQuoteReturn" type="xs:float"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> </types> インターフェイス内で順番に指定したパラメータと soap リクエスト内の名前つきパラメータを含む XML を相互変換するために、 SCA ランタイムは特別な処理をします。この件について知るために、 さまざまなインターフェイスを使用する PHP スクリプトが SOAP コールようのパラメータリストをどのように作成するのかを考えてみましょう。 たとえば PHP の SoapClient を使用する PHP スクリプトは、 "ticker" および "currency" の値を指定したひとつのパラメータを SoapClient に渡す必要があります。おそらくこれは連想配列になるでしょう。 SCA コンポーネントがウェブサービス用にパラメータリストを作成する場合は、 相手がローカルであるかリモートであるかによって形式が異なります。 そのため、個別のアプローチが必要となります。 SCA が SCA コンポーネント用の WSDL を作成する際に、 その WSDL が SCA コンポーネントのインターフェイスであることを示すコメントを埋め込みます。 ある SCA コンポーネントが別のコンポーネントをウェブサービスとしてコールするとき、 呼び出し側の SCA ランタイムが受け取るパラメータは、 指定された順番に並べられたリストとなります。 これを、soap メッセージの名前つきパラメータにひとつひとつ割り当てるわけです。 たとえば、上で定義した getQuote() メソッドに値 'IBM' および 'USD' を渡す場合のコール方法は、このようになります。
<?php この結果は、次のような soap メッセージになります。
<getQuote> <ticker>IBM</ticker> <currency>USD</currency> </getQuote> サービス提供側の SCA コンポーネントは、soap メッセージから受け取った 名前つきパラメータをひとつひとつ受け取り、順番が指定されたパラメータリスト形式の ('IBM','USD') に再変換します。 警告
どちらの側の SCA ランタイムについても、 soap メッセージ内でのパラメータの登場順が メソッドのパラメータリストの順序と一致していることを前提としています。 これは、@param アノテーションの順序によって決まります。 これが、WSDL 内でのパラメータの登場順と soap メッセージ内でのパラメータの登場順を定義しています。 したがって、@param アノテーションの順序は メソッドのパラメータの順番と一致させておくことが必要不可欠です。 |
各種マニュアル:
PHPマニュアル |
PEARマニュアル |
Smarty(英語)マニュアル |
PHP-GTKマニュアル |
「WSDL の作成方法について理解する」をGoogle検索
|