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

时间:2013-08-04 21:50:11

标签: php soap error-handling soap-client

我正在编写一个执行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请求。谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果有错误,SoapClient可以抛出异常。

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

这更是如此,因为SoapClient无法检测HTTP错误。如果你想捕获那些错误,你必须将错误作为异常抛出(但是如果启用XDebug则不起作用,但这只应该是开发中的情况)。