我有一个访问密钥库的代码。当我的密码错误时,我得到UnrecoverableKeyException
类型的例外。所以我把我的代码编写为:
try {
InputStream f = new FileInputStream("<location to file>")
keyStore.load( f , passwords );
} catch(UnrecoverableKeyException e){
log.error("")
}
但这并没有抓住异常。因此,在我的catch
块中,我将代码更改为:
catch(Exception e)
{
log.error(e.getClass(),e)
}
捕获异常并打印类类型为class java.io.IOException
。但是为什么我首先得到的异常是UnrecoverableKeyException
的消息?
实际发生了什么?
提前致谢。
答案 0 :(得分:3)
KeyStore.load
的Javadoc表示它可以抛出IOException
,还有:
如果错误是由于密码错误引起的,则IOException的原因应该是UnrecoverableKeyException
这意味着您捕获的实际上是IOException
,但e.getCause()
将是UnrecoverableKeyException
。打印堆栈跟踪时,您会看到链中的所有原因,这可能会让您认为它是UnrecoverableKeyException
。