ColdFusion没有捕获NoClassDefFoundError

我正在使用ColdFusion 8.我想在ColdFusion中捕获NoClassDefFoundErrorexception但是我不能…它仍然失败并将错误记录在exception.log文件中。 这是我尝试过的。

       Horrible exception.    

但这不起作用。 你能告诉我怎么做吗? 我需要在特定的地方捕获此错误,而不是在Application.cfc的OnError函数中捕获。

现在我已经喝了更多咖啡,我认为cfcatch无法捕获NoClassDefFoundError 。 根据文档,它只处理exception :

例外是破坏ColdFusion页面中正常指令流的事件,例如数据库操作失败,缺少包含文件和开发人员指定的事件。

NoClassDefFoundError是一个错误 。

错误表示合理的应用程序不应该尝试捕获的严重问题

听起来cfcatch只是为了处理正常的“可恢复”问题而设计的。 一旦得到NoClassDefFoundError你真的没什么可做的。 这是一个严重的错误,你无法通过它(在正常情况下)。 您可以做的最多是显示错误消息并退出。

Application.onError似乎处理未捕获的错误,如NoClassDefFoundError ,以及exception。 所以我认为你能做的最好的就是实现onError并让它显示一个错误页面。

       .... settings ...    

onError Test

// test class public class MyClass { public void myMethod() { throw new NoClassDefFoundError ("Testing..."); } }

更新

Any类型包括Java对象类型java.lang.Exception的所有错误。 它不包含java.lang.Throwable错误。 要捕获Throwable错误,请在cfcatch标记类型属性中指定java.lang.Throwable

尽管文档说的是,捕获Throwable在我的任何测试(或你的测试)中都不起作用。 这强烈暗示了行为或文档中的错误。 无论哪种方式它都不像宣传的那样工作,所以如上所述,我所知道的唯一选择是使用一般的error handling程序。 如果由于某种原因必须坚持使用Application.cfm文件,请尝试使用

(荒谬)测试案例:

     CAUGHT java.lang.NoClassDefFoundError   CAUGHT java.lang.LinkageError   CAUGHT java.lang.Error   CAUGHT java.lang.Throwable   CAUGHT ANY   CAUGHT