• Willkommen im Zend Framework Forum

    ZF1 Zend Framework 1 + ZF2 Zend Framework 2

    Das Zend Framework Forum ist seit 2006 die erste Anlaufstelle für Zend Framework Entwickler in Deutschland. Mit über 70.000 Beiträgen und einer steigenden Nutzerzahl bietet das Forum hilfreiche Themen und ZF-Tutorials für professionelle Entwickler, fortgeschrittene Programmierer sowie Zend Framework Einsteiger.
    Wenn dies Dein erster Besuch in der Zend Framework Community ist, lies bitte zuerst die Hilfe - FAQ durch. Du musst Dich registrieren, bevor Du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um die Registrierung zu starten. Du kannst auch jetzt schon Beiträge lesen. Hier im Forum findest Du die Zend Framework Hilfe, die Du suchst!

    Grüße an alle Zend Framework Entwickler. Das Team vom Zend Framework Forum!

    Drupal Agentur

SOAP: Zend_Soap_Client - Richtiger Abruf von ComplexTypes

spankmaster79

New member
Hi,

ich versuche einen Webservice aufzurufen und versetehe noch nicht ganz was ich wie übergeben muss damit das ganze funktioniert.

Im Webservice stehen im Bereich type folgende complexTypes:

Code:
<wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/">
      <s:element name="getTermsForService">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="universalid" type="s:string" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:element name="getTermsForServiceResponse">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="getTermsForServiceResult" type="tns:ArrayOfString" />
          </s:sequence>
        </s:complexType>
      </s:element>
      <s:complexType name="ArrayOfString">
        <s:sequence>
          <s:element minOccurs="0" maxOccurs="unbounded" name="string" nillable="true" type="s:string" />
        </s:sequence>
      </s:complexType>
    </s:schema>
  </wsdl:types>
 <wsdl:message name="getTermsForServiceSoapIn">
    <wsdl:part name="parameters" element="tns:getTermsForService" />
  </wsdl:message>
  <wsdl:message name="getTermsForServiceSoapOut">
    <wsdl:part name="parameters" element="tns:getTermsForServiceResponse" />
  </wsdl:message>
  <wsdl:portType name="Service1Soap">
    <wsdl:operation name="getTermsForService">
      <wsdl:input message="tns:getTermsForServiceSoapIn" />
      <wsdl:output message="tns:getTermsForServiceSoapOut" />
    </wsdl:operation>
  </wsdl:portType>
PHP:
$client = new Zend_Soap_Client($this->config->webserviceWsdlFile);

try {
     	$result = $client->getTermsForService($_GET['universalid']);
} catch (Exception $e) {
    	// @TODO catch correctly
       	var_dump($e);
}
din result bekomme ich dann immer das folgende zurück:

Code:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <getTermsForServiceResponse xmlns="http://tempuri.org/">
         <getTermsForServiceResponse/>
      </getTermsForServiceResponse>
   </soap:Body>
</soap:Envelope>
Wird der Parameter den ich mitgebe überhaupt so angenommen? Und wieso enthält die Antwort keine Parameter sondern nur den Body getTermsForServiceResponse.

Bin noch nicht so in WSDL bzw. Soap drin. Kann mir da einer kurz helfen?

gruß
 

spankmaster79

New member
Gelöst

Hab mein Problem gefunden. Complex types kann ich auch als array übergeben mit key als complexType Name, dann funktioniert es:

PHP:
   $client = new Zend_Soap_Client($this->config->webserviceWsdlFile); 

    try { 
       $result = $client->getTermsForService(array('universalid' => $_GET['universalid']);
       var_dump($result->getTermsForServiceResponse);
    } catch (Exception $e) { 
    // @TODO catch correctly 
       var_dump($e); 
    }
gibt folgendes zurück:
Code:
    object(stdClass)[123]
      public 'string' => 
        array
          0 => string '0815' (length=10)
          1 => string '0816' (length=10)
 
Oben