<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 24249 -->
<sect1 id="zend.soap.client">
    <title>Zend_Soap_Client(日本語)</title>

    <para>
        <classname>Zend_Soap_Client</classname>により<acronym>PHP</acronym>プログラマーにとって<acronym>SOAP</acronym>クライアントの開発が簡単になります。
    </para>

    <para>
        WSDLモードまたは非WSDLモードで使用できるでしょう。
    </para>

    <para>
        WSDLモードでは、<classname>Zend_Soap_Client</classname>コンポーネントは
        トランスポート層オプションを定めるためにWSDLドキュメントを使います。
    </para>

    <para>
        WSDL記述は通常、クライアントがアクセスするウェブ・サービスによって提供されます。
        WSDL記述が利用できるようにならなければ、非WSDLモードで<classname>Zend_Soap_Client</classname>を使いたいかもしれません。
        すべての<acronym>SOAP</acronym>プロトコル・オプションは、
        このモードで明示的に<classname>Zend_Soap_Client</classname>クラス上に設定されなければなりません。
    </para>

    <sect2 id="zend.soap.client.constructor">
        <title>Zend_Soap_Clientコンストラクタ</title>
        <para>
            <classname>Zend_Soap_Client</classname>コンストラクタには引数が２つあります:
            <itemizedlist>
                <listitem>
                    <para>
                        <code>$wsdl</code> - WSDLファイルの<acronym>URI</acronym>
                    </para>
                </listitem>
                <listitem>
                    <para>
                        <code>$options</code> - <acronym>SOAP</acronym>クライアントオブジェクトを作成するためのオプション
                    </para>
                </listitem>
            </itemizedlist>

            これらのパラメータは両方とも、
            それぞれ<methodname>setWsdl($wsdl)</methodname>や<methodname>setOptions($options)</methodname>メソッドで、
            後から設定されるかもしれません。
        </para>

        <note>
            <title>重要</title>
            <para>
                もし非WSDLモードで<classname>Zend_Soap_Client</classname>コンポーネントを使う場合、
                'location' および 'uri' オプションを設定し<emphasis>なければなりません</emphasis>。
            </para>
        </note>

        <para>
            下記のオプションが許されています:
            <itemizedlist>
                <listitem>
                    <para>
                        'soap_version' ('soapVersion') - 使用する<acronym>SOAP</acronym>バージョン (SOAP_1_1 または SOAP_1_2).
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'classmap' ('classMap') -
                        一部の WSDL 型を<acronym>PHP</acronym>クラスにマップするために使います。
                    </para>
                    <para>
                        このオプションは、キーとしてWSDL型、値として<acronym>PHP</acronym>クラス名をもつ配列でなければなりません。
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'encoding' - 内部文字エンコーディング。 (対外的なエンコーディングとしてUTF-8が常に使われます)
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'wsdl' <methodname>setWsdl($wsdlValue)</methodname>呼び出しと同じです。
                    </para>
                    <para>
                        このオプションを変更すると、
                        <classname>Zend_Soap_Client</classname>オブジェクトをWSDLモードに、または、から切り替えるかもしれません。
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'uri' - <acronym>SOAP</acronym>サービスのためのターゲットのネームスペース (非WSDLモードで必要です。WSDLモードでは動作しません)
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'location' - 要求する<acronym>URL</acronym> (非WSDLモードで必要です。WSDLモードでは動作しません)
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'style' - 要求形式 (WSDLモードでは動作しません): <code>SOAP_RPC</code> または <code>SOAP_DOCUMENT</code>
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'use' - メッセージをエンコードするメソッド (WSDLモードでは動作しません): <code>SOAP_ENCODED</code> または
                        <code>SOAP_LITERAL</code>
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'login' および 'password' - <acronym>HTTP</acronym>認証のための login および password
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'proxy_host', 'proxy_port', 'proxy_login' および 'proxy_password' - プロキシ・サーバ経由の<acronym>HTTP</acronym>接続
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'local_cert' および 'passphrase' - <acronym>HTTPS</acronym>クライアント証明書認証オプション。
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'compression' - 圧縮オプション; 
                        <code>SOAP_COMPRESSION_ACCEPT</code>や<code>SOAP_COMPRESSION_GZIP</code>、
                        <code>SOAP_COMPRESSION_DEFLATE</code>の組み合わせです。
                        下記のように使われるでしょう:
                    </para>

                    <programlisting language="php"><![CDATA[
// レスポンスの圧縮を受け付けます
$client = new Zend_Soap_Client("some.wsdl",
  array('compression' => SOAP_COMPRESSION_ACCEPT));
...

// 圧縮レベル５でqzipを使ってリクエストを圧縮します
$client = new Zend_Soap_Client("some.wsdl",
  array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5));
...

// deflate 圧縮を使ってリクエストを圧縮します
$client = new Zend_Soap_Client("some.wsdl",
  array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_DEFLATE));
]]></programlisting>
                </listitem>
            </itemizedlist>
        </para>
    </sect2>

    <sect2 id="zend.soap.client.calls">
        <title>SOAPリクエストの実行</title>

        <para>
            <classname>Zend_Soap_Client</classname>オブジェクトを作成したら、<acronym>SOAP</acronym>リクエストを実行する準備ができます。
        </para>
        <para>
            ウェブ・サービス・メソッドそれぞれで、
            一般的な<acronym>PHP</acronym>型のパラメータを持つ仮想<classname>Zend_Soap_Client</classname>オブジェクト・メソッドにマップされます。
        </para>

        <para>
            それを下記の例のように使います:
        </para>

        <programlisting language="php"><![CDATA[
//****************************************************************
//                サーバのコード
//****************************************************************
// class MyClass {
//     /**
//      * このメソッドは ...
//      *
//      * @param integer $inputParam
//      * @return string
//      */
//     public function method1($inputParam) {
//         ...
//     }
//
//     /**
//      * このメソッドは ...
//      *
//      * @param integer $inputParam1
//      * @param string  $inputParam2
//      * @return float
//      */
//     public function method2($inputParam1, $inputParam2) {
//         ...
//     }
//
//     ...
// }
// ...
// $server = new Zend_Soap_Server(null, $options);
// $server->setClass('MyClass');
// ...
// $server->handle();
//
//****************************************************************
//                サーバのコード終了
//****************************************************************

$client = new Zend_Soap_Client("MyService.wsdl");
...

// $result1 は string です。
$result1 = $client->method1(10);
...

// $result2 は float です。
$result2 = $client->method2(22, 'some string');
]]></programlisting>
    </sect2>
</sect1>
