Handle SOAP fatal error when there is a connection issue

人盡茶涼 提交于 2019-12-12 03:36:17

问题


I'm trying to connect to a soap service using a WSDL file in php 5.6

The snippet below works fine if I'm on the network, but if I'm disconnected I get a fatal error.

try {
    $soap_client = new SoapClient($wsdl_file, ['exceptions' => true]);
}
catch (SoapFault $fault) {
    echo 'poop';
}
catch (Exception $exception) {
    echo 'pee';
}

edit: it does seem to do something with the SoapFault, because I can see my 'poop' debug message, but it still results in a fatal error

These are the errors I get

Warning (2): SoapClient(): php_network_get_addresses: getaddrinfo failed: No such host is known.
Warning (2): SoapClient(http://soap.service.com/serivce.svc) [soapclient.soapclient]: failed to open stream: php_network_getaddresses: getaddrinfo failed: No such host is known.
Error: SOAP-ERROR: Parsing Schema: can't import schema from 'http://soap.service.com/serivce.svc'

How can I gracefully handle the error so that php continues to run, so I can set a variable and render an HTML page indicating that there was a problem connecting


回答1:


This was a cakephp issue

https://github.com/cakephp/cakephp/issues/8501

$restore = error_reporting(0);
try {
    $soap_client = new SoapClient($wsdl_file, ['exceptions' => true]);
}
catch (SoapFault $e) {
    trigger_error($e->getMessage()); // Overwrites E_ERROR with E_USER_NOTICE
}
finally {
    error_reporting($restore);
}



回答2:


You should consider all exception types. Try putting Exception instead of SoapFault in catch statement.



来源:https://stackoverflow.com/questions/35950981/handle-soap-fatal-error-when-there-is-a-connection-issue

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!