现在,我已经喝了更多的咖啡,我认为cfcatch无法捕获
NoClassDefFoundError。根据文档,它仅处理Exceptions:
异常 是会干扰ColdFusion页面中的正常指令流的事件,例如数据库 *** 作失败,缺少包含文件以及开发人员指定的事件。
NoClassDefFoundError是一个错误。
错误表明严重的问题,合理的应用程序不应尝试抓住
听起来好像
cfcatch只是设计来处理正常的“可恢复”问题。一旦获得签证,实际上没什么可做的
NoClassDefFoundError。这是一个严重的错误,您无法克服它(在正常情况下)。您最多只能显示一条错误消息并退出。
Application.onError似乎处理未捕获的错误,例如
NoClassDefFoundError,以及异常。因此,我认为您能做的最好的事情就是实施
onError并显示错误页面。
<!---- test pre ---> <cfset myJavaObject = createObject("java", "path.to.MyClass") /> <cfset myJavaObject.myMethod() /> <!---- Application.cfc ---> <cfcomponent> .... settings ... <cffunction name="onError" returnType="void"> <cfargument name="Exception" required="true" /> <cfargument name="EventName" type="string" required="true" /> <h1>onError Test</h1> <cfdump var="#Exception#" /> </cffunction> </cfcomponent> // 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在我的任何测试(或您的测试)中均无法进行捕获。这强烈表明行为或文档中存在错误。无论哪种方式,它都 不能
像宣传的 那样
工作,因此如上所述,我知道的唯一替代方法是使用常规错误处理程序。如果由于某些原因必须坚持使用Application.cfm文件,请尝试使用
<cferrortype="exception"...>
(荒谬)测试案例:
<cftry> <cfset myJavaObject = createObject("java", "path.to.MyClass")> <cfset myJavaObject.myMethod()> <cfcatch type="java.lang.NoClassDefFoundError"> CAUGHT java.lang.NoClassDefFoundError </cfcatch> <cfcatch type="java.lang.linkageError"> CAUGHT java.lang.linkageError </cfcatch> <cfcatch type="java.lang.Error"> CAUGHT java.lang.Error </cfcatch> <cfcatch type="java.lang.Throwable"> CAUGHT java.lang.Throwable </cfcatch> <cfcatch type="any"> CAUGHT ANY </cfcatch> <cfcatch> CAUGHT </cfcatch></cftry>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)