1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 20810 -->
4 <sect1 id="zend.soap.server">
5 <title>Zend_Soap_Server</title>
8 <classname>Zend_Soap_Server</classname>クラスは、
9 ウェブ・サービス部分の開発を<acronym>PHP</acronym>プログラマーにとって簡単にすることを目的としています。
13 それは、ウェブサービス<acronym>API</acronym>を定義するクラスまたは機能を使って、
14 WSDLモードまたは非WSDLモードで使われるかもしれません。
18 <classname>Zend_Soap_Server</classname>コンポーネントがWSDLモードで動くとき、
19 サーバオブジェクトの挙動とトランスポート層オプションを定義する
20 すでに用意されたWSDLドキュメントを使います。
25 <link linkend="zend.soap.autodiscovery.introduction">Zend_Soap_AutoDiscoveryコンポーネント</link>
26 によって提供される機能によって自動的に生成されるか、
27 または、<link linkend="zend.soap.wsdl"><classname>Zend_Soap_Wsdl</classname>クラス</link>や、
28 その他の<acronym>XML</acronym>生成ツールを使って、
34 すべてのプロトコル・オプションはオプション・メカニズムを用いて設定されなければなりません。
37 <sect2 id="zend.soap.server.constructor">
38 <title>Zend_Soap_Serverコンストラクタ</title>
40 <classname>Zend_Soap_Server</classname>コンストラクタは、
41 WSDLモードと非WSDLモードとでは少し使い方が違います。
44 <sect3 id="zend.soap.server.constructor.wsdl_mode">
45 <title>WSDLモードのためのZend_Soap_Serverコンストラクタ</title>
47 WSDLモードで動作する場合、<classname>Zend_Soap_Server</classname>コンストラクタは2つの引数を受け取ります:
51 <code>$wsdl</code> WSDLファイルの<acronym>URI</acronym>
54 あとで<methodname>setWsdl($wsdl)</methodname>メソッドを使って
62 <code>$options</code> - <acronym>SOAP</acronym>サーバオブジェクトを作成するためのオプション
65 オプションは後で<methodname>setOptions($options)</methodname>を使って
71 WSDLモードでは下記のオプションが許されています:
75 'soap_version' ('soapVersion') - 使用する<acronym>SOAP</acronym>バージョン (SOAP_1_1 または SOAP_1_2)
80 'actor' - サーバのためのアクター<acronym>URI</acronym>。
85 'classmap' ('classMap') -
86 一部の WSDL 型を<acronym>PHP</acronym>クラスにマップするために使います。
89 このオプションは、キーとしてWSDL型、値として<acronym>PHP</acronym>クラス名をもつ配列でなければなりません。
94 'encoding' - 内部文字エンコーディング。 (対外的なエンコーディングとしてUTF-8が常に使われます)
99 'wsdl' <methodname>setWsdl($wsdlValue)</methodname>呼び出しと同じです。
109 <sect3 id="zend.soap.server.wsdl_mode">
110 <title>非WSDLモードのためのZend_Soap_Serverコンストラクタ</title>
112 非WSDLモードで<classname>Zend_Soap_Server</classname>機能を使うつもりなら、
113 最初のコンストラクタ・パラメータは<constant>NULL</constant>に設定し<emphasis>なければなりません</emphasis>。
116 この場合、'uri' オプションを設定しなければなりません。(下記参照)
120 2番目のコンストラクタ・パラメータ (<code>$options</code>) は、
121 <acronym>SOAP</acronym>サーバオブジェクトを作成するためのオプション配列です
124 オプションは後で<methodname>setOptions($options)</methodname>メソッドを使って
130 非WSDLモードでは下記のオプションが許されています:
134 'soap_version' ('soapVersion') - 使用する<acronym>SOAP</acronym>バージョン (SOAP_1_1 または SOAP_1_2)
139 'actor' - サーバのためのアクター<acronym>URI</acronym>。
144 'classmap' ('classMap') -
145 一部の WSDL 型を<acronym>PHP</acronym>クラスにマップするために使います。
148 このオプションは、キーとしてWSDL型、値として<acronym>PHP</acronym>クラス名をもつ配列でなければなりません。
153 'encoding' - 内部文字エンコーディング。 (対外的なエンコーディングとしてUTF-8が常に使われます)
158 'uri' (必須) - <acronym>SOAP</acronym>サーバのための<acronym>URI</acronym>ネームスペース
166 <sect2 id="zend.soap.server.api_define_methods">
167 <title>ウェブ・サービスAPIを定義するメソッド</title>
170 <acronym>SOAP</acronym>を通して<acronym>PHP</acronym>コードにアクセスすることを許可したいときに、
171 ウェブサービス<acronym>API</acronym>を定義する2つの方法があります。
175 最初の一つは、ウェブサービス<acronym>API</acronym>を完全に記述しなければならない<classname>Zend_Soap_Server</classname>オブジェクトに対して、
177 <programlisting language="php"><![CDATA[
183 * @param integer $inputParam
186 public function method1($inputParam) {
193 * @param integer $inputParam1
194 * @param string $inputParam2
197 public function method2($inputParam1, $inputParam2) {
204 $server = new Zend_Soap_Server(null, $options);
206 $server->setClass('MyClass');
207 // 初期化済みのオブジェクトをSOAPサーバにバインド
208 $server->setObject(new MyClass());
215 対応するウェブサービスWSDLを準備するautodiscover機能を使うつもりならば、
216 メソッドdocblockを使って各々のメソッドを完全に記述しなければなりません。
222 ウェブサービス<acronym>API</acronym>を定義する2つ目の方法は、
223 関数のセットや<methodname>addFunction()</methodname>または<methodname>loadFunctions()</methodname>メソッドを使うことです:
224 <programlisting language="php"><![CDATA[
229 * @param integer $inputParam
232 function function1($inputParam) {
239 * @param integer $inputParam1
240 * @param string $inputParam2
243 function function2($inputParam1, $inputParam2) {
247 $server = new Zend_Soap_Server(null, $options);
248 $server->addFunction('function1');
249 $server->addFunction('function2');
256 <sect2 id="zend.soap.server.request_response">
257 <title>リクエストおよびレスポンスオブジェクトの操作</title>
261 このセクションではリクエスト/レスポンス処理の高度なオプションを説明します。
267 <classname>Zend_Soap_Server</classname>コンポーネントは自動的にリクエスト/レスポンス処理を実行します。
268 しかし、その処理を捕まえて何らかの事前もしくは事後の処理をさせることもできます。
271 <sect3 id="zend.soap.server.request_response.request">
272 <title>リクエスト処理</title>
275 <methodname>Zend_Soap_Server::handle()</methodname>メソッドは、
276 標準的な入力ストリーム ('php://input') からリクエストを取得します。
277 それは、<methodname>handle()</methodname>メソッドにオプションのパラメータを供給することによって、
278 または、<methodname>setRequest()</methodname>メソッドを用いてリクエストを設定することによって
280 <programlisting language="php"><![CDATA[
282 $server = new Zend_Soap_Server(...);
284 // オプションの $request パラメータを使ってリクエストを設定
285 $server->handle($request);
287 // setRequest() メソッドを使ってリクエストを設定
288 $server->setRequest();
294 リクエストオブジェクトは以下のどれかを用いて表されるかもしれません:
298 DOMDocument (<acronym>XML</acronym>にキャストされます)
304 所有者のドキュメントは横取りされて<acronym>XML</acronym>にキャストされます)
309 SimpleXMLElement (<acronym>XML</acronym>にキャストされます)
314 stdClass (__toString() が呼び出されて、有効な<acronym>XML</acronym>であることが確かめられます)
319 string (有効な<acronym>XML</acronym>であることが確かめられます)
326 最後に処理されたリクエストは<methodname>getLastRequest()</methodname>メソッドを使って<acronym>XML</acronym>文字列として取得されます:
327 <programlisting language="php"><![CDATA[
329 $server = new Zend_Soap_Server(...);
332 $request = $server->getLastRequest();
338 <sect3 id="zend.soap.server.request_response.response">
339 <title>レスポンスの事前処理</title>
342 <methodname>Zend_Soap_Server::handle()</methodname>メソッドは、出力ストリームに生成されたレスポンスを自動的に送ります。
343 それは<methodname>setReturnResponse()</methodname>にパラメータとして
344 <constant>TRUE</constant>または<constant>FALSE</constant>を与えてブロックできます。
348 <methodname>setReturnResponse()</methodname> メソッドによりリクエストされます。
351 生成されたレスポンスはこの場合、<methodname>handle()</methodname>メソッドにより戻されます。
352 <programlisting language="php"><![CDATA[
354 $server = new Zend_Soap_Server(...);
357 //handle() メソッドの返り値としてレスポンスを取得
358 $server->setReturnResponse(true);
360 $response = $server->handle();
366 ある処理のために、最後のレスポンスを<methodname>getLastResponse()</methodname>メソッドで取得することもできます:
367 <programlisting language="php"><![CDATA[
369 $server = new Zend_Soap_Server(...);
372 $response = $server->getLastResponse();