我正在编写一个执行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请求。谢谢!
答案 0 :(得分:0)
如果出现错误,SOAP将抛出SoapFault异常。您只需要捕获异常,就可以处理错误。
答案 1 :(得分:0)
如果有错误,SoapClient可以抛出异常。
如果禁用抛出异常,那些异常对象仅返回。您必须检查返回值是否是SoapFault
的实例,但更好的方法是抛出它们,并使用try / catch。
这更是如此,因为SoapClient无法检测HTTP错误。如果你想捕获那些错误,你必须将错误作为异常抛出(但是如果启用XDebug则不起作用,但这只应该是开发中的情况)。