异常CertificateException永远不会在相应的try语句的主体中抛出

时间:2014-11-30 08:55:50

标签: java exception ssl

我尝试使用java

读取URL
try{
    HttpURLConnection c = (HttpURLConnection) new URL(args[0]).openConnection();
    c.setRequestMethod("GET");
    c.setRequestProperty("User-Agent","Mozilla/5.0");
    c.setRequestProperty("Accept-Language","en-US,en;q=0.5");
    System.out.println(c.getResponseCode());
}catch(java.security.cert.CertificateException e){
    System.out.println("not valid");
}catch(Exception e){
    System.out.println(e.getMessage());
}

当我仅使用具有无效ssl认证的域名的最后一个捕获时,它会抛出java.security.cert.CertificateException: No name matching <domainName> found

但是当我尝试捕获更多作品的确切异常时,它不会编译并打印此错误:

error: exception CertificateException is never thrown in body of corresponding try statement
    }catch(java.security.cert.CertificateException e){
    ^

我如何向编译器保证这个捕获位置正确,或者我的问题是什么?

1 个答案:

答案 0 :(得分:0)

  

当我使用带有无效ssl认证的域名的最后一个catch时,它会抛出java.security.cert.CertificateException:找不到名称匹配

不,它没有。它会抛出SSLHandshakeException包装该异常。再看看。

  

我如何向编译器保证此捕获位于正确的位置

你不能。它不是。编译器是正确的。

  

我的问题是什么?

正是编译器所说的。您正在捕捉未被抛出的异常。取下渔获。如果你愿意,可以抓住SSLHandshakeException