如何向 ColdFusion 异常对象添加属性

问题描述 投票:0回答:3

我知道这看起来一定是一个非常人为的例子,但我有一个情况,在一个 catch 中我将尝试/捕获另一个异常。但是,我想在第二个捕获中包含有关第一个异常的信息。理想情况下它看起来像这样:

try {
  a = b;
}
catch ( any e ) {
  local.originalException = Duplicate(e);
  try  {
     throw "New exception!!!";
  }
  catch( any e )    {
     e.originalException = local.originalException;
     doNotification( e );
  }
}

当我运行这个小测试时,设置 e.originalException 时不会发生意外异常,但是,当我在设置后立即转储异常时,它不是异常结构的一部分。也许还有另一种方法可以实现这一目标吗?我正在使用 ACF 9。

exception coldfusion
3个回答
3
投票

不幸的是,您实际上无法将太多附加信息“附加”到 CF 异常。但是你可以做这样的事情来将一个异常包装在另一个异常中......

<cftry>
<cfset a = b>
<cfcatch>
    <cftry>
        <cfthrow message="new exception" extendedinfo="#serializeJson(cfcatch)#">
        <cfcatch>
            <cfset stOriginalExceptionData = deserializeJson(cfcatch.extendedInfo)>
            <cfdump var="#stOriginalExceptionData#">
        </cfcatch>
    </cftry>
</cfcatch>

这种技巧对你有帮助吗?


0
投票

您是否尝试过复制该对象?因为根据 documentation 你不能修改 cfcatch 异常:

Changed对象修改:不能修改返回的对象 cfcatch


0
投票

我知道我回答“有点”晚了,但我遇到了同样的问题,这就是我解决它的方法:

<cfscript>
try {
  a = b;
}
catch ( any e ) {
  local.originalException = Duplicate(e);
  try  {
     throw "New exception!!!";
  }
  catch( any e )    {
    local.e = deserializeJson(serializeJson(e));
    local.e.originalException = local.originalException;
    writeDump(local.e);
  }
}
</cfscript>
© www.soinside.com 2019 - 2024. All rights reserved.