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()
即可获取您的异常。