2017-02-14 5 views
1

Webservice vorbei Ich rufe kehrt mit xml SoapFault in <detail> Element eingebettet - das ist, wie es in SoapUI aussieht:PHP SoapFault nicht Attribute im Detail Subelemente

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Body> 
    <soapenv:Fault> 
     <faultcode>soapenv:Server</faultcode> 
     <faultstring>some error msg</faultstring> 
     <detail> 
      <e:exchange-error xmlns:e="http://mycompany.com/faults"> 
       <e:message-data id="00001" type="005"/> 
       <e:result-data date="2017-02-13 15:44:33" code="1401" ref="2457798154426512"/> 
      </e:exchange-error> 
     </detail> 
    </soapenv:Fault> 
</soapenv:Body> 
</soapenv:Envelope>` 

Es scheint, wie PHP Implementierung nicht die Attribute nicht passieren von xML-Knoten, gibt es nur die Werte (die in diesem Fall leer sind):

try { 
    $resp = $this->_soap->__soapCall("myMethod", ['param-data' => $req->get()]); 
    var_dump($response); 
} catch (\SoapFault $e) { 
    if (empty($e->detail->{'exchange-error'}->{'result-data'})) { 
     echo "it's empty :(\n"; 
     var_dump($e->detail->{'exchange-error'}); 
    } 
} 

$ php -f foobar.php 
it's empty :(
object(stdClass)#7 (4) { 
    ["message-data"]=> 
    string(0) "" 
    ["result-data"]=> 
    string(0) "" 
} 

gibt es eine Möglichkeit exchange-error Objekt mit Attributwerten zu bekommen? Oder vielleicht einfach XML/string von detail und parse es? Die Fehlermeldung ist in WSDL definiert, daher sollte ihre Struktur auf der Clientseite bekannt sein.

Antwort

0

Die Namespace-Attribute werden in der PHP-Antwort nicht zurückgegeben. Sie werden nur verwendet, um zu definieren, um welche Art von Antwortobjekt es sich handelt.

Wenn Sie Ihren Tag erleichtern möchten, verwenden Sie eine WSDL zu PHP-Generator wie das PackageGenerator Projekt. Es wird Ihnen helfen, die Anfrage zu erstellen, es wird Ihnen helfen, die Antwort zu erhalten, und schließlich wird es Ihnen die Behandlung eines Fehlers erleichtern.

+0

Leider habe ich keine Kontrolle darüber, was Server als Antwort auslässt - ich muss nur den Wert eines der Ergebnisdatenattribute identifizieren, um Spezialfälle der Fehlerbehandlung zu implementieren. – bezetde

Verwandte Themen