第二十六章 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
错误的文本。
网友评论