【问题标题】:IllegalArgumentException is not being caught or missing somethingIllegalArgumentException 没有被捕获或丢失某些东西
【发布时间】:2013-07-07 14:16:32
【问题描述】:

以下代码:

try {
    value = parse(myData);
} catch (Exception e) {
    if ( e instanceof IOException|| e instanceof IllegalArgumentException) {
       logger.debug("illegal argument");
    } else {
       logger.debug("this is printing");
    }
}

解析方法:

parse(String data) throws IOException, IllegalArgumentException {
   // do validation
    throw new IllegalArgumentException("illegal");
}

我期待“非法争论”。但它却显示“这是正在打印”。

我错过了什么吗?

【问题讨论】:

  • 应该可以,您确定您运行的不是旧版本的应用程序吗?
  • 同理,将代码复制到空项目时,打印“非法参数”。
  • 不。我可以看到从解析中抛出的消息“非法”。但它在 if 条件下不匹配
  • 发送getClass() 来检查你得到了什么。
  • 你是对的。它引发了其他一些异常。请将此作为答案。我会接受的。

标签: java exception try-catch illegalargumentexception throws


【解决方案1】:

我追踪了它。当这个 IllegalArgumentException 被抛出时,它被 EJBTransactionRollbackException 包裹。

抛出以下内容:

The transaction has been marked rollback only because the bean encountered a non-application 
exception :java.lang.IllegalArgumentException: 
Actual Exception class: class javax.ejb.EJBTransactionRolledbackException

现在问题不同了,如何不让 EJBTransactionException 覆盖实际的异常

【讨论】:

  • 重写不是正确的词。 EJBTransactionRollbackException 包装了 IllegalArgumentException,因此类型不匹配。您可以捕获异常并执行getCause() 来获取您的异常。
【解决方案2】:

只是一个想法。您确定在 throwcatch 部分使用同一包中的类吗?例如,您可以在 parse 方法中抛出 com.foo.bar.IllegalArgumentException,但尝试捕获 java.lang.IllegalArgumentException 因此,如果您将它们放在不同的类中,请检查导入部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-26
    • 2018-03-29
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 2012-06-04
    • 2018-08-25
    • 2013-09-01
    相关资源
    最近更新 更多