Java IllegalArgumentException未被捕获或丢失某些内容

Java IllegalArgumentException未被捕获或丢失某些内容,java,exception,try-catch,illegalargumentexception,throws,Java,Exception,Try Catch,Illegalargumentexception,Throws,以下代码: try { value = parse(myData); } catch (Exception e) { if ( e instanceof IOException|| e instanceof IllegalArgumentException) { logger.debug("illegal argument"); } else { logger.debug("this is printing"); } } 解析方法:

以下代码:

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");
}
我期待着“非法争论”。但它显示的是“这是印刷品”


我错过什么了吗?

只是个主意。您确定在投掷捕获部分使用同一软件包中的类吗。例如,您可以在parse方法中抛出
com.foo.bar.IllegalArgumentException
,但尝试捕获
java.lang.IllegalArgumentException

所以,请你们检查一下导入部分,以防它们在不同的类中。

我跟踪了它。当抛出此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覆盖实际的异常应该可以工作,你确定你没有运行旧版本的应用程序吗?这里也是一样,当将代码复制到一个空项目中时,它会打印“非法参数”。不。我可以看到从解析中抛出的消息“非法”。但是如果条件执行一个
getClass()
来检查你得到了什么,它就不会被匹配。你是对的。它抛出了一些其他的异常。请回答这个问题。我会接受的。Override这个词不合适。
EJBTransactionRollbackException
包装了
IllegalArgumentException
,因此类型不匹配。您只需捕获异常并执行
getCause()
即可获取您的异常。