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.
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