为什么UnrecoverableKeyException在这种情况下抛出异常?

时间:2012-07-03 14:32:38

标签: java

我有一个访问密钥库的代码。当我的密码错误时,我得到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的消息?

实际发生了什么?

提前致谢。

1 个答案:

答案 0 :(得分:3)

KeyStore.load的Javadoc表示它可以抛出IOException,还有:

  

如果错误是由于密码错误引起的,则IOException的原因应该是UnrecoverableKeyException

这意味着您捕获的实际上是IOException,但e.getCause()将是UnrecoverableKeyException。打印堆栈跟踪时,您会看到链中的所有原因,这可能会让您认为它是UnrecoverableKeyException