SOAP Message zusammen bauen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SOAP Message zusammen bauen

    Hallo liebe Gemeinde!

    Ich glaube ich stehe gerade aufm Schlauch beim zusammenbauen einer SOAP-Message, im speziellen Fall des Response.

    Ich benutze php 5.2.5 und habe mir einen soap-server mit WSDL erstellt, soweit so gut. Nun muss das Ding ja auch antworten, das klappt auch, aber halt nicht in der gewünschten XML-Struktur.

    PHP-Code:
    $server = new SoapServer("Events.asmx.wsdl",array('soap_version' => SOAP_1_2));
    $server->setClass("Events");
    if (
    $_SERVER["REQUEST_METHOD"] == "POST") {
      
    $server->handle();
        } else 
        {
            echo 
    "This SOAP server can handle following functions: ";
            
    $functions $server->getFunctions();
            foreach(
    $functions as $func) {
                echo 
    $func "\n";
            }
        } 
    Das Ding funktioniert schonmal, ich komme in der Klasse Event an und kann dort die einzelnen Properties rausholen und weiter verwursten.

    Als Response soll die Klasse Result mit 3 Properties zurückgeschickt werden.

    PHP-Code:
    class Result
    {
        public 
    $TransactionGUID;//string
        
    public $Nr;//int
        
    public $Description;//string

    Fülle ich das ganze nun mit Leben und

    PHP-Code:
    $EventResult = new Result();
           
    $EventResult->TransactionGUID$this->TransactionGUID;
           
    $EventResult->Nr 0;
           
    $EventResult->Description="OK";
           
           return 
    $EventResult
    Bekomme ich folgendes Ergebnis:
    Code:
    <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" 
      xmlns:ns1="http://somewhere.de/my_server.php">
       <env:Body>
          <ns1:EventResponse/>
       </env:Body>
    </env:Envelope>
    Ich hätte jetzt erwartet, dass ich unterhalb der Eventresponse die Struktur meines Result-Objekts wieder fiinde. Habe ich da irgendwie was generell missverstanden?

    Nächster Versuch war mit SAOPVAR(...), auch mit mäßigem Erfolg:

    PHP-Code:
     $MMSReceivedEventResult = new SoapVar(array("EventResult"=>array($this->TransactionGUID=>"TransactionGUID")) ,SOAP_ENC_OBJECT ); 
    Das liefert mir:

    Code:
    <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://somewhere.de/my_server.php">
       <env:Body>
          <ns1:EventResponse>
             <EventResult>
                <item>
                   <key>42bd79fa-985a-47e2-9d97-0ed4b1a274ed</key>
                   <value>TransactionGUID</value>
                </item>
             </EventResult>
          </ns1:EventResponse>
       </env:Body>
    </env:Envelope>
    Hat vielleicht jemand nen Tipp, wo ich da falsch denke?

    Danke schön!

  • #2
    Um das nachvollziehen zu können, fehlt einiger Code.
    Vielleicht hilft dir das: SOAP Dienste programmieren mit PHP | TheGeek.de

    Kommentar


    • #3
      Fein, das hat geholfen, das gewünschte Ergebnis zu bekommen! Danke

      Wobei verstanden habe ich es nicht, warum der Return des Result-Objekt nicht auch zu dem Ergebnis führt. Per Array:
      PHP-Code:
       return array("EventResult"=> array("TransactionGUID"=>$this->TransactionGUID
                                                          
      ,"Nr"=>0
                                                          
      ,"Description"=>"OK")); 
      kommt das

      Code:
      <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://somewhere.de/my_server.php">
         <env:Body>
            <ns1:EventResponse>
               <ns1:EventResult>
                  <ns1:TransactionGUID>
                        42bd79fa-985a-47e2-9d97-0ed4b1a274ed
                     </ns1:TransactionGUID>
                  <ns1:Nr>0</ns1:Nr>
                  <ns1:Description>OK</ns1:Description>
               </ns1:EventResult>
            </ns1:EventResponse>
         </env:Body>
      </env:Envelope>
      Wo liegt in diesem Fall der Unterschied zwischen Array und Objekt, strukturell sind sie doch gleich, oder?

      Kommentar

      Lädt...
      X