1

以下代码:

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");
}

我期待“非法争论”。但相反,它显示“这是打印”。

我在这里错过了什么吗?

4

2 回答 2

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 覆盖实际的异常

于 2013-07-09T20:40:57.717 回答
0

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

于 2013-07-09T20:27:45.907 回答