第二十六章 SOAP 错误处理 - 处理 Web 客户端中的 SOAP 故障和其他错误
处理 Web 客户端中的 SOAP 故障和其他错误
在网络客户端中,可以使用 TRY-CATCH 机制或较旧的 $ZTRAP 机制。
无论哪种情况,当Web 客户端收到错误时,都会设置特殊变量 $ZERROR 和 %objlasterror:
- 如果错误是
SOAP错误,则$ZERROR的值以<ZSOAP>,开头,并且%objlasterror包含由接收到的SOAP错误形成的状态错误。
此外,客户端实例具有一个名为 SoapFault 的属性,它是 %SOAP.Fault或 %SOAP.Fault12的实例(取决于 Web 服务中使用的 SOAP 版本)。可以使用此属性中的信息。有关 %SOAP.Fault和 %SOAP.Fault12的更多信息,请参阅前面的部分。
- 如果错误不是
SOAP错误,请使用常规错误处理(通常使用$ZERROR)。有责任指定如何继续。
示例 1:Try-Catch
以下方法使用TRY-CATCH:
ClassMethod Divide(arg1 As %Numeric, arg2 As %Numeric) As %Numeric
{
Set $ZERROR=""
Set client=##class(FaultClient.DivideSoap).%New()
Try {
Set ans=client.Divide(arg1,arg2)
}
Catch {
If $ZERROR["<ZSOAP>" {
Set ans=%objlasterror
}
Else {
Set ans=$$$ERROR($$$ObjectScriptError,$ZERROR)
}
}
Quit ans
}
此方法使用 %systemInclude 包含文件中定义的系统宏,因此包含此方法的类以以下内容开头:
Include %systemInclude
示例 2:$ZTRAP
以下示例使用较旧的 $ZTRAP 机制。在这种情况下,当 Web 客户端收到错误时,控制权将转移到 $ZTRAP 特殊变量指示的标签(如果该标签已定义)。
ClassMethod DivideWithZTRAP(arg1 As %Numeric = 1, arg2 As %Numeric = 2) As %Numeric
{
Set $ZERROR=""
Set $ZTRAP="ERRORTRAP"
Set client=##class(FaultClient.DivideSoap).%New()
Set ans=client.Divide(arg1,arg2)
Quit ans
//control goes here in case of error
ERRORTRAP
if $ZERROR["<ZSOAP>"
{
quit client.SoapFault.Detail
}
else
{
quit %objlasterror
}
}
SSL 握手错误
如果 Web 客户端使用 SSL 连接并且发生 SSL握手错误,则客户端的 SSLError 属性包含描述 SSL 错误的文本。