ColdFusion没有捕获NoClassDefFoundError
我正在使用ColdFusion 8.我想在ColdFusion中捕获NoClassDefFoundError
exception但是我不能…它仍然失败并将错误记录在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