当前位置: 首页 > 面试题库 >

ColdFusion没有捕获NoClassDefFoundError

诸经略
2023-03-14
问题内容

我正在使用ColdFusion8。我想NoClassDefFoundError在ColdFusion中捕获一个异常,但是我不能…它仍然失败,并且将错误记录在exception.log文件中。这是我尝试过的。

<cftry>
    <cfset myJavaObject.myMethod()>
    <cfcatch type="any">
        <cfdump var="#cfcatch #">
    </cfcatch>
    <cfcatch type="java.lang.Throwable">
        Horrible exception.
        <cfdump var="#cfcatch #">
    </cfcatch>
</cftry>

但这是行不通的。您能告诉我该怎么做吗?我需要在特定位置而不是在OnErrorApplication.cfc函数中捕获此错误。


问题答案:

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

异常 是会干扰ColdFusion页面中的正常指令流的事件,例如数据库操作失败,缺少包含文件以及开发人员指定的事件。

NoClassDefFoundError是一个错误。

错误表明严重的问题,合理的应用程序不应尝试抓住

听起来好像cfcatch只是设计来处理正常的“可恢复”问题。一旦获得签证,实际上没什么可做的NoClassDefFoundError。这是一个严重的错误,您无法克服它(在正常情况下)。您最多只能显示一条错误消息并退出。

Application.onError似乎处理未捕获的错误,例如NoClassDefFoundError,以及异常。因此,我认为您能做的最好的事情就是实施onError并显示错误页面。

    <!---- test code --->
    <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文件,请尝试使用<cferror type="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>


 类似资料:
  • 大概是这样的: 谢谢[已解决] 也感谢Umer Farooq的回答:从lambda内部修改局部变量

  • 问题内容: 我在Java Web应用程序中有一个线程,它导致 java.lang.OutOfMemoryError:Java堆空间 异常,但是try / catch块无法捕获该错误。 样例代码: 输出: 背景: 我最近接手了这个Java项目,并试图跟上Java和这个项目的发展。我是C#开发人员,所以我还不熟悉这个项目或Java。我知道我可以使用- Xmx设置来修复该错误,但我有兴趣捕获此错误,因此

  • 我喜欢认为我很擅长PowerShell,但我在这里有点困惑。 我有一个巨大的文件列表,我将在上面运行此代码,这将给我一些必要的文件信息,我将运行分析。第一步就是获取文件列表。所以我运行这个。 这返回了一堆无用的信息,但也给了我一片红色的海洋。有大量的文件和文件夹无法找到,并明确拒绝我。我想捕获所有这些错误,以便将它们解析为相关信息,因此我的直觉告诉我使用Try/catch。 通常情况下,您使用tr

  • 我再次编写另一个银行系统插件,但这次是使用ATM。我正在尝试弄清楚如何在单击该选项后获得玩家聊天输入,以防止单击100次以在银行帐户上存入50,000美元。 我正在用Paper-Spigot 1.14.4编写这个插件,我尝试了以下步骤: 作为一个单独的类,仅当我向插件管理器注册事件时才激活: 使用 get 和 set-method创建一个 变量 ,并在需要时在该方法中调用它。 我当前的方法: 获取

  • 我有一个存储过程似乎没有正确记录错误。 代码有错误,但 catch 块似乎未生效。 try块相当长,但错误部分很简单,并且在最后出现,所以我已经对此进行了预测。 proc失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误 - 这是一个愚蠢的懒惰错误 - 但我感到困惑为什么我的错误日志记录过程似乎没有工作 - 没有行入到我的 ExtractsErrorLog 表中。

  • 问题内容: 当仅更改位置哈希值时,是否有办法应对javascript中的后退按钮被击中(或按下退格键)的问题?也就是说,当浏览器不与服务器通信或重新加载页面时。 问题答案: 使用事件: 如果需要支持较旧的浏览器,请查看Modernizr的HTML5跨浏览器Polyfills Wiki页面中的“事件”部分。