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

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

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

    <para>
        Im WSDL Modus verwendet die Zend_Soap_Client 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 Zend_Soap_Client im nicht-WSDL
        Modus verwenden. In diesem Modus müssel alle SOAP Protokolloptionen explizit an der
        Zend_Soap_Client Klasse gesetzt werden.
    </para>

    <sect2 id="zend.soap.client.constructor">
        <title>Der <classname>Zend_Soap_Client</classname> Konstruktor.</title>
        <para>
            Der <classname>Zend_Soap_Client</classname> Konstruktor nimmt zwei Parameter:
            <itemizedlist>
                <listitem>
                    <para>
                        <code>$wsdl</code> - eine URI einer WSDL Datei.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        <code>$options</code> - Optionen um ein SOAP Client Objekt zu erstellen.
                    </para>
                </listitem>
            </itemizedlist>

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

        <note>
            <title>Wichtig!</title>
            <para>
                Wenn die Zend_Soap_Client 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 SOAP_1_2).
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'classmap' ('classMap') welche verwendet werden kann um einige WSDL Typen auf PHP
                        Klassen zu mappen.
                    </para>
                    <para>
                        Die Option muß ein Array mit WSDL Typen als Schlüssel und Namen von PHP 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 <code>setWsdl($wsdlValue)</code> entspricht.
                    </para>
                    <para>
                        Das Ändern dieser Option kann das Zend_Soap_Client Objekt von oder zum WSDL Modus
                        wechseln.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'uri' - Der Ziel-Namespace für den SOAP Service (benötigt im nicht-WSDL Modus,
                        funktioniert nicht im WSDL Modus).
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'location' - Die URL 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): <code>SOAP_RPC</code> oder
                        <code>SOAP_DOCUMENT</code>.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'use' - Methode zum Verschlüsseln von Nachrichten (funktioniert nicht im WSDL
                        Modus): <code>SOAP_ENCODED</code> oder <code>SOAP_LITERAL</code>.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'login' und 'password' - Login und Passwort für eine HTTP Authentifizierung.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'proxy_host', 'proxy_port', 'proxy_login', und 'proxy_password' - Eine HTTP
                        Verbindung über einen Proxy Server.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'local_cert' und 'passphrase' - HTTPS Client Authentifizierungs Optionen für Zertifikate.
                    </para>
                </listitem>
                <listitem>
                    <para>
                        'compression' - Komprimierungs Optionen; das ist eine Kombination von
                        <code>SOAP_COMPRESSION_ACCEPT</code>, <code>SOAP_COMPRESSION_GZIP</code> und
                        <code>SOAP_COMPRESSION_DEFLATE</code> Optionen welche wie folgt verwendet werden
                        können:
                        <programlisting role="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>
                    </para>
                </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
            SOAP 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 PHP Typen entgegen nimmt.
        </para>

        <para>
            Es ist wie im folgenden Beispiel zu verwenden:
            <programlisting role="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>
        </para>
    </sect2>
</sect1>
