以下代码:
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");
}
我期待“非法争论”。但相反,它显示“这是印刷”。
我在这里错过了什么吗?
答案 0 :(得分:0)
只是一个想法。您确定在抛出和捕获部分使用相同包中的类。例如,您可以在解析方法中抛出com.foo.bar.IllegalArgumentException
但尝试捕获java.lang.IllegalArgumentException
那么请你检查导入部分,以防你有不同的类。
答案 1 :(得分:0)
我追踪它。抛出此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覆盖实际的异常