首页 > 解决方案 > 获取 JschException 的原始原因

问题描述

我需要对 JschException 做一些处理。无论异常的具体原因是什么(即 SocketTimeoutException、UnknownHostKey 或 AuthFail),看起来都会引发“JschException”。我确定最初的具体原因的最佳方法是什么?e.getMessage()我是解析字符串的唯一选择吗?

这里是基本结构。

try {
    session = jSch.getSession(getUsername(), host);
    session.setUserInfo(user);
    session.connect();
} catch (JSchException e) {
    e.printStackTrace();
    // Here I need to identify the cause and handle accordingly.
}

例如,这里分别是超时和身份验证失败的顶部跟踪。

com.jcraft.jsch.JSchException: Session.connect: java.net.SocketTimeoutException: Read timed out

com.jcraft.jsch.JSchException: Auth fail

如果这很重要,我想针对身份验证错误启动 try 块的重试,并因超时错误而失败。

标签: javaexceptionsshjsch

解决方案


确实,JSch 抛出异常是一种无法找到根本原因的方式(解析异常消息除外)。

JSch 充满了这样的代码:

catch(Exception e) {
  ...
  throw new JSchException("Session.connect: "+e);
}

推荐阅读