注記
WSDL文書による操作を行なうために、
内部的にZend_Soap_Server
コンポーネントによってZend_Soap_Wsdl
が使われます。
それでも、このクラスにより提供される機能を独自の必要性によって使うこともできます。
Zend_Soap_Wsdl
パッケージは、パーサーとWSDL文書のビルダーを含みます。
あなたに使う予定がなければ、この節を読み飛ばすことができます。
Zend_Soap_Wsdl
コンストラクタは3つのパラメータをとります:
-
$name
- 記述されたウェブサービスの名前。 -
$uri
- WSDLが利用できるURI (ファイルシステムのファイルへのリファレンスでも可) -
$strategy
- 複雑な型(オブジェクト)を検出する方策を 識別するために用いられるオプションのフラグです。 これはバージョン1.7より前はブール値$extractComplexTypes
でしたが、 後方互換性のためにまだブール値として設定できます。 デフォルトで、1.6の検出動作が設定されます。 複雑な型の検出の方策について詳しくは、この節をご覧下さい: 複雑な型を追加
addMessage($name, $parts)
メソッドは、新しいメッセージの説明をWSDL文書に加えます。
(/definitions/message 要素)
Zend_Soap_Server
およびZend_Soap_Client
の機能に関して、
各々のメッセージはメソッドと対応します。
$name
パラメータはメッセージの名前を示します。
$parts
パラメータはSOAP呼び出しパラメータを表すメッセージ部分の配列です。
それは連想配列です: 'part name' (SOAP呼び出しパラメータ名) => 'part type'.
型マッピングの管理はaddTypes()
やaddTypes()
、
およびaddComplexType()
メソッド(下記参照)を用いて実行されます。
注記
メッセージ部分は 'element' または 'type' 属性を型決定のために使います。 (http://www.w3.org/TR/wsdl#_messagesをご覧ください).
'element' 属性は、データ型定義の対応する要素を参照しなければなりません。 'type' 属性は、対応するcomplexType項目を参照します。
標準XSD型のすべてで 'element' および 'complexType' 定義の両方があります。 (http://schemas.xmlsoap.org/soap/encoding/参照)
Zend_Soap_Wsdl::addComplexType()
メソッドを用いて追加されるであろう、
標準ではない型のすべてがWSDL文書の '/definitions/types/schema/' セクションの 'complexType' ノードで記述されます。
そしてaddMessage()
メソッドは型を表現するために、
常に 'type' 属性を使います。
addPortType($name)
メソッドは指定されたポートタイプ名で
WSDL文書 (/definitions/portType) に新規のポートタイプを追加します。
Zend_Soap_Server
の実装に関して定義されるウェブサービスメソッドのセットと結びつきます。
詳しくはhttp://www.w3.org/TR/wsdl#_porttypesをご覧ください。
addPortOperation($portType, $name, $input = false, $output = false, $fault = false)
メソッドは、新しいポート・オペレーションをWSDL文書 (/definitions/portType/operation) の
指定されたポート・タイプに加えます。
各々のポート・オペレーションはZend_Soap_Server
実装では、
クラス・メソッド(ウェブサービスがクラスに基づくならば)
または関数(ウェブサービスがメソッドセットに基づくならば)に対応します。
それも、指定されたパラメータ、$input
や$output
および$fault
に従って、
対応するポート・オペレーション・メッセージを加えます。
注記
Zend_Soap_Server
クラスに基づいてサービスを記述するために、
Zend_Soap_Server
コンポーネントは各々のポート・オペレーションのために2つのメッセージを生成します:
-
$methodName . 'Request'
という名前で入力メッセージ。 -
$methodName . 'Response'
という名前で出力メッセージ。
詳しくはhttp://www.w3.org/TR/wsdl#_request-responseをご覧ください。
addBinding($name, $portType)
メソッドは、新しいバインディングをWSDL文書 (/definitions/binding) に加えます。
'binding' WSDL文書ノードでは、 メッセージ形式と特定のportTypeによって定義されるオペレーションとメッセージに関するプロトコル詳細を定義します。 (http://www.w3.org/TR/wsdl#_bindingsをご覧ください)
メソッドはバインディング・ノードをつくって、それを返します。 それから、実際のデータで満たすために使われるかもしれません。
Zend_Soap_Server
の実装ではWSDL文書の 'binding' 要素のために$serviceName . 'Binding'
の名前が使われます。
addBindingOperation($binding, $name, $input = false, $output = false, $fault = false)
メソッドはバインディング要素 (/definitions/binding/operation) に指定された名前で操作を追加します。
指定されたパラメータに従って、
入力・出力・false値を持つ 'operation' 要素を加えるために、
入力($binding
パラメータ)としてaddBinding()
によって返される
XML_Tree_Node
オブジェクトをそのメソッドは取得します。
Zend_Soap_Server
の実装で、 'soap:body' 要素を
'<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
として定義している入出力エントリで、
ウェブサービス・メソッドごとに対応するバインディング・エントリを加えます。
詳しくはhttp://www.w3.org/TR/wsdl#_bindingsをご覧ください。
addSoapBinding($binding, $style = 'document', $transport = 'http://schemas.xmlsoap.org/soap/http')
メソッドは、指定されたスタイルとトランスポート(Zend_Soap_Server
の実装では、HTTPについてRPCスタイルを使用します)で
SOAPバインディング項目 ('soap:binding') をバインディング要素(それは、あるポートタイプにすでにリンクされます)に追加します。
'/definitions/binding/soap:binding' 要素は、 バインディングがSOAPプロトコル形式に束縛されることを示すのに用いられます。
詳しくはhttp://www.w3.org/TR/wsdl#_bindingsをご覧ください。
addSoapOperation($binding, $soap_action)
メソッドは、
SOAP操作項目 ('soap:operation') を指定されたアクションでバインディング要素に加えます。
'soap:operation' 要素の 'style' 属性は、(RPC指向か文書指向の)プログラミング・モデルが
addSoapBinding()
メソッドを使用しているかもしれないので使われません。
'/definitions/binding/soap:operation' 要素の 'soapAction' 属性は、 この操作のためにSOAPActionヘッダの値を指定します。 この属性はHTTPを通じたSOAPで必須です。 他のトランスポートのために指定してはいけません。
Zend_Soap_Server
の実装では、SOAP操作アクション名のために
$serviceUri . '#' . $methodName
を使います。
詳しくはhttp://www.w3.org/TR/wsdl#_soap:operationをご覧ください。
addService($name, $port_name, $binding, $location)
メソッドは
指定したウェブサービス名やポートタイプ及びバインディング、ロケーションとともに
WSDL文書に '/definitions/service' 要素を追加します。
WSDL 1.1では、サービスごとにいくつかのポートタイプ(操作のセット)を持つことができます。
この能力はZend_Soap_Server
の実装では使われず、
Zend_Soap_Wsdl
クラスでサポートされません。
Zend_Soap_Server
の実装に使用します:
$name
がクラスを使うウェブサービス定義モードのためのクラス名と
関数のセットを使うウェブサービス定義モードのためのスクリプト名前であるところ。
詳しくはhttp://www.w3.org/TR/wsdl#_servicesをご覧ください。
Zend_Soap
WSDLアクセッサの実装では、PHPとSOAP型の間で以下の型マッピングを使用します:
xsd:
が "http://www.w3.org/2001/XMLSchema" ネームスペースであるところでは、
soap-enc:
は "http://schemas.xmlsoap.org/soap/encoding/" ネームスペースで、
tns:
はサービスのための "target namespace" です。
getType($type)
メソッドは、指定された PHP 型をマップするために用いられるかもしれません:
... $wsdl = new Zend_Soap_Wsdl('My_Web_Service', $myWebServiceUri); ... $soapIntType = $wsdl->getType('int'); ... class MyClass { ... } ... $soapMyClassType = $wsdl->getType('MyClass');
addComplexType($type)
メソッドは、
複雑な型(PHPクラス)をWSDL文書に追加するために使われます。
メソッド・パラメータの対応する複雑な型を追加するか、型を返すために、
getType()
メソッドによってそれは自動的に使われます。
その検出とビルドのアルゴリズムは、複雑な型に対して現在実装中の検出ストラテジーに基づきます。
文字列でのクラス名指定、
または、コンストラクタの第3パラメータとしてZend_Soap_Wsdl_Strategy_Interface
を実装したインスタンス、
または、Zend_Soap_Wsdl
のsetComplexTypeStrategy($strategy)
関数の利用のいずれかにより、
検出ストラテジーを設定できます。
以下の検出ストラテジーが、現在存在します:
-
クラス
Zend_Soap_Wsdl_Strategy_DefaultComplexType
: デフォルトで許可されます(第3のコンストラクタ・パラメータが設定されないとき)。 クラス型の public 属性項目を反復して、 複雑なオブジェクト型のサブタイプとして登録します。 -
クラス
Zend_Soap_Wsdl_Strategy_AnyType
: 単純なXSD型 xsd:anyType に、すべての複雑な型を投げます。 複雑な型検出のこのショートカットが PHPのような型検査の弱い言語により、うまく取り扱われるかどうか注意してください。 -
クラス
Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence
: このストラテジーにより、以下のようにタイプの戻りパラメータを指定できます:int[]
またはstring[]
. Zend Framework バージョン 1.9 以降、 それは単純なPHP型(例えばint)、文字列、ブール値、floatなどを取り扱えるばかりではなく、 オブジェクトおよびオブジェクトの配列も指定できます。 -
クラス
Zend_Soap_Wsdl_Strategy_ArrayOfTypeComplex
: このストラテジーにより、非常に複雑な多数のオブジェクトを見つけることができます。 オブジェクト型はZend_Soap_Wsdl_Strategy_DefaultComplexType
に基づいて 検出されます。配列はその定義の周囲を包まれます。 -
クラス
Zend_Soap_Wsdl_Strategy_Composite
: このストラテジーは、connectTypeToStrategy($type, $strategy)
メソッドを通じて 希望するストラテジーにPHPの複雑な型(クラス名)を接続することによって、 すべてのストラテジーを結合できます。 完全なタイプマップを、$type
->$strategy
のペアを持つ配列として コンストラクタに与えられます。 もし未知の型の追加が必要であれば、第2パラメータで使われるデフォルト・ストラテジーを指定します。 このパラメータのデフォルトは、Zend_Soap_Wsdl_Strategy_DefaultComplexType
です。
addComplexType()
メソッドは、指定されたPHPクラスの名前で、
記述された複雑な型ごとに '/definitions/types/xsd:schema/xsd:complexType' 要素を生成します。
クラスのプロパティは、プロパティをWSDL記述にインクルードしておくために、記述されたPHP型でdocblock部を持っていなければなりません。
addComplexType()
は型がWSDL文書の型セクションの範囲内ですでに記述されるかどうか調べます。
このメソッドが型定義部で2回以上再帰で呼ばれると、それは重複を防ぎます。
詳しくはhttp://www.w3.org/TR/wsdl#_typesをご覧ください。
addDocumentation($input_node, $documentation)
メソッドは、
オプションの 'wsdl:document' 要素を用いて人間の読める文書を追加します。
'/definitions/binding/soap:binding' 要素は、 バインディングがSOAPプロトコル構成にバインドされることを示すために使われます。
詳しくはhttp://www.w3.org/TR/wsdl#_documentationをご覧ください。
toXML()
やtoDomDocument()
およびdump($filename = false)
メソッドは、
WSDL文書をXMLやDOMの構造もしくはファイルとして取得するために使われるかもしれません。
[26]
'tns:' namespace
はスクリプトのURI
('http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']
)
として定義されます。
[27] 'http://' .$_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']
[28]
デフォルトで、Zend_Soap_Wsdl
は複雑な型のための検出アルゴリズムとして
Zend_Soap_Wsdl_Strategy_DefaultComplexType
クラスで生成されます。
AutoDiscoverコンストラクタの最初のパラメータは、
Zend_Soap_Wsdl_Strategy_Interface
を実装した、
どんな複雑な型ストラテジーでも、クラスの名前を持つ文字列でもとります。
$extractComplexType
との後方互換性のために、
ブール変数は、以下の方法で解析されます:
もし TRUE
なら、Zend_Soap_Wsdl_Strategy_DefaultComplexType
、
もし FALSE
なら、Zend_Soap_Wsdl_Strategy_AnyType
。