如何对SOAP请求失败进行错误处理


How to do error handling of SOAP request failures?

我正在编写一个执行SOAP请求的PHP应用程序。有时他们的服务器没有启动或出现某种问题,我的应用程序会出现这样的错误:

Undefined property: stdClass::$getSomethingJSONResult

SOAP请求失败的原因可能有很多,我希望能够检查这些错误条件,以便程序能够处理它

我在PHP中使用了两个SOAP函数。一个用于登录SOAP服务器,另一个用于进行查询以获取soapFunction。它们看起来像这样:

// --------------------- FUNCTIONS -----------------------
function login_soap($username,$password) {
global $soapClient;
$soapURL = "http://SOAPServerSomeplace.asmx?WSDL";
$ns = 'http://microsoft.com/webservices/'; //Namespace of the WS.
$soapParameters = array('userName' => $username, 'password' => $password);
$soapClient = new SoapClient($soapURL);
$header = new SoapHeader($ns,'UserCredentials',$soapParameters,false);
$soapClient->__setSoapHeaders($header);
}
// -------------------------------------------------------
function getSomething($option) {
global $soapClient;
$soapFunctionParameters = array('this' => $option) ;
$soapFunction = "getSomethingJSON" ;
$this_json = $soapClient->$soapFunction($soapFunctionParameters);
$stdClassObject = json_decode($this_json->getSomethingJSONResult);
$this_obj = $stdClassObject->this;
return $this_obj;   
}
// -------------------------------------------------------

我想知道我是否可以这样做:

if (login_soap($username,$password)) {
echo "This worked." . "'n";
} else {
echo "This failed." . "'n";
}

还是使用getSomething($option)?

我不知道如何模拟SOAP请求失败来测试这一点,但我认为SOAP请求失败会导致PHP中止。我需要捕获它,这样它就不会中止PHP,这样我就可以指导它做其他事情。

我首先关心的是确保SOAP请求工作正常。然后检查它返回的JSON文件,以确保它在程序继续之前具有所需的所有数据。检查我已经找到的JSON文件,但没有使用SOAP请求。谢谢

如果出现错误,

SOAP将抛出SoapFault异常。您只需要捕获Exception,就可以处理错误。

http://www.php.net/manual/de/class.soapfault.php

SoapClient可以在出现错误时抛出异常。

如果禁用了抛出异常,则这些异常对象只返回。您必须检查返回值是否是SoapFault的实例,但更好的方法是抛出它们,并使用try/catch。

这更是真实的,因为SoapClient无法检测到HTTP错误。如果您也想捕获这些错误,则必须将错误作为异常抛出(不过,如果启用了XDebug,则不起作用,但这应该仅在开发中发生)。