在Java中进行远程调用时要处理的异常

时间:2018-06-12 07:19:35

标签: java exception-handling java-8

我正在申请中拨打远程电话。我想处理不同的异常,并在各自的例外情况下执行不同的任务。

我正在调查MalformedURLExceptionUnknownHostExceptionConnectionExceptionSocketTimeoutException

我知道在MalformedURLException的情况下,我想删除请求,这个很简单。

catch (MalformedURLException e) {
    log.info("MalformedURLException while fetching log");
    log.info("Content Url is Invalid and is being Dropped");
    return keywords;
}

现在,如果断开连接,我想在一小段时间后重试请求。我应该处理哪个例外?

我对ConnectExceptionUnknownHostException感到困惑。

catch (UnknownHostException e) {
    log.info("UnknownHostException while fetching log");
    log.info("Internet disconnectivity Retrying Content Url");
    keywords.add(value);
    Thread.sleep(1000);
    return keywords;
}

接下来,我在代码中使用了con.setConnectTimeout(20000);con.setReadTimeout(30000);。所以我猜这是否过期然后我可以处理SocketTimeoutException

catch (SocketTimeoutException e) {
    log.info("SocketTimeoutException while fetching log:");
    keywords = increaseRetryCount(keywords, result, retryCount, url);
    return keywords;
}

我是否正确处理问题并使用正确的例外情况?请告诉我,如果我遗失了什么。

1 个答案:

答案 0 :(得分:1)

当没有连接时,

ConnectExceptionUnknownHostException都会发生。如果DNS缓存中没有条目,则会发生UnknownHostException;当DNS缓存中有条目但主机无法访问时,会发生ConnectException

只需抓住IOException并重试(但不是永远,而是在一段时间后增加暂停并放弃)。

唯一的特殊情况是来自服务器的无效URL或永久性错误(如无效身份验证,......)。