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

    <para>
        Die <classname>Zend_Soap_Client</classname> Klasse vereinfacht die Entwicklung von
        <acronym>SOAP</acronym> Clients für <acronym>PHP</acronym> Programmierern.
    </para>

    <para>
        Sie kann im WSDL oder im nicht-WSDL Modus verwendet werden.
    </para>

    <para>
        Im WSDL Modus verwendet die <classname>Zend_Soap_Client</classname> Komponente ein bereits
        vorbereitetes WSDL Dokument um die Optionen des Transport Layers zu definieren.
    </para>

    <para>
        Die WSDL Beschreibung wird normalerweise vom Web Service bereitgestellt auf das der Client
        zugreift. Wenn die WSDL Beschreibung nicht verfügbar gemacht wurde, kann man
        <classname>Zend_Soap_Client</classname> im nicht-WSDL Modus verwenden. In diesem Modus
        müssen alle <acronym>SOAP</acronym> Protokolloptionen explizit an der
        <classname>Zend_Soap_Client</classname> Klasse gesetzt werden.
    </para>

    <sect2 id="zend.soap.client.constructor">
        <title>Der Zend_Soap_Client Konstruktor</title>

        <para>
            Der <classname>Zend_Soap_Client</classname> Konstruktor nimmt zwei Parameter:

            <itemizedlist>
                <listitem>
                    <para>
                        <varname>$wsdl</varname> - eine <acronym>URI</acronym> einer WSDL Datei.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        <varname>$options</varname> - Optionen um ein <acronym>SOAP</acronym> Client
                        Objekt zu erstellen.
                    </para>
                </listitem>
            </itemizedlist>

            Beide Parameter können später gesetzt werden indem die
            <methodname>setWsdl($wsdl)</methodname> und
            <methodname>setOptions($options)</methodname> Methoden verwendet werden.
        </para>

        <note>
            <title>Wichtig!</title>

            <para>
                Wenn die <classname>Zend_Soap_Client</classname> Komponente im nicht-WSDL Modus
                verwendet wird, <emphasis>müssen</emphasis> die 'location' und 'uri' Optionen
                gesetzt werden.
            </para>
        </note>

        <para>
            Die folgenden Optionen werden erkannt:

            <itemizedlist>
                <listitem>
                    <para>
                        'soap_version' ('soapVersion') - Die zu verwendende SOAP Version
                        (SOAP_1_1 oder <acronym>SOAP</acronym>_1_2).
                    </para>
                </listitem>

                <listitem>
                    <para>
                        'classmap' ('classMap') welche verwendet werden kann um einige WSDL Typen
                        auf <acronym>PHP</acronym> Klassen zu mappen.
                    </para>

                    <para>
                        Die Option muß ein Array mit WSDL Typen als Schlüssel und Namen von
                        <acronym>PHP</acronym> Klassen als Werte sein.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        'encoding' - Interne Zeichen Kodierung (UTF-8 wird immer als externe
                        Kodierung verwendet).
                    </para>
                </listitem>

                <listitem>
                    <para>
                        'wsdl' welcher dem Aufruf von <methodname>setWsdl($wsdlValue)</methodname>
                        entspricht.
                    </para>

                    <para>
                        Das Ändern dieser Option kann das <classname>Zend_Soap_Client</classname>
                        Objekt von oder zum WSDL Modus wechseln.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        'uri' - Der Ziel-Namespace für den <acronym>SOAP</acronym> Service (benötigt
                        im nicht-WSDL Modus, funktioniert nicht im WSDL Modus).
                    </para>
                </listitem>

                <listitem>
                    <para>
                        'location' - Die <acronym>URL</acronym> der Anfrage (benötigt im nicht-WSDL
                        Modus, funktioniert nicht im WSDL Modus).
                    </para>
                </listitem>

                <listitem>
                    <para>
                        'style' - Anfrage Stil (funktioniert nicht im WSDL Modus):
                        <constant>SOAP_RPC</constant> oder <constant>SOAP_DOCUMENT</constant>.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        'use' - Methode zum Verschlüsseln von Nachrichten (funktioniert nicht im
                        WSDL Modus): <constant>SOAP_ENCODED</constant> oder
                        <constant>SOAP_LITERAL</constant>.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        'login' und 'password' - Login und Passwort für eine <acronym>HTTP</acronym>
                        Authentifizierung.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        'proxy_host', 'proxy_port', 'proxy_login', und 'proxy_password' - Eine
                        <acronym>HTTP</acronym> Verbindung über einen Proxy Server.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        'local_cert' und 'passphrase' - <acronym>HTTPS</acronym> Client
                        Authentifizierungs Optionen für Zertifikate.
                    </para>
                </listitem>

                <listitem>
                    <para>
                        'compression' - Komprimierungs Optionen; das ist eine Kombination von
                        <constant>SOAP_COMPRESSION_ACCEPT</constant>,
                        <constant>SOAP_COMPRESSION_GZIP</constant> und
                        <constant>SOAP_COMPRESSION_DEFLATE</constant> Optionen welche wie folgt
                        verwendet werden können:
                    </para>

                    <programlisting language="php"><![CDATA[
// Komprimierung der Antworten akzeptieren
$client = new Zend_Soap_Client("some.wsdl",
  array('compression' => SOAP_COMPRESSION_ACCEPT));
...

// Anfragen komprimieren durch Verwendung von gzip mit Komprimierungs-Level 5
$client = new Zend_Soap_Client("some.wsdl",
  array('compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5));
...

// Anfragen komprimieren durch Verwendung der Deflate Komprimierung
$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 Anfragen durchführen</title>

        <para>
            Nachdem ein <classname>Zend_Soap_Client</classname> Objekt erstellt wurde sind wir
            bereit um <acronym>SOAP</acronym> Anfragen durchzuführen.
        </para>

        <para>
            Jede Methode des Web Services wird auf eine virtuelle
            <classname>Zend_Soap_Client</classname> Objekt-Methode gemappt welche Parameter mit
            üblichen <acronym>PHP</acronym> Typen entgegen nimmt.
        </para>

        <para>
            Es ist wie im folgenden Beispiel zu verwenden:
        </para>

        <programlisting language="php"><![CDATA[
//****************************************************************
//                Server Code
//****************************************************************
// class MyClass {
//     /**
//      * Diese Methode nimmt ...
//      *
//      * @param integer $inputParam
//      * @return string
//      */
//     public function method1($inputParam) {
//         ...
//     }
//
//     /**
//      * Diese Methode nimmt ...
//      *
//      * @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();
//
//****************************************************************
//                Ende des Server Codes
//****************************************************************

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

// $result1 ist ein String
$result1 = $client->method1(10);
...

// $result2 ist ein Float
$result2 = $client->method2(22, 'irgendein String');
]]></programlisting>
    </sect2>
</sect1>
