SocketTimeoutException

SocketTimeoutException

我有一个Jersey客户端,想对SocketTimeoutException执行重试,这是我在服务器日志上看到的错误。代码框架如下。 webtarget是已定义url路径和queryparams的javax.ws.rs.client.WebTarget实例。我面临的问题是webtarget.request.get()从不抛出任何SocketTimeoutException,因此我实际上无法捕获此异常。有什么想法可以实际执行重试吗?

int i = 0;
Response response;
while (true) {
    try {
        response = webtarget.request().get();
        break;
    } catch (SocketTimeoutException e){
        if (i < retryNumber) {
            i++;
        } else {
            // throws some exception
        }
    }
}

最佳答案

我最终想出了解决方案。事实证明SocketTimeoutException映射到泽西客户端实际抛出的ProcessingException。所以以下代码有效

int i = 0;
Response response;
while (true) {
    try {
        response = webtarget.request().get();
        break;
    } catch (ProcessingException e){
        if (e.getCause() instanceof SocketTimeoutException && i < retryNumber) {
            i++;
        } else {
            // throws some exception
        }
    }
}

关于java - SocketTimeoutException上的Java jersey重试请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37244264/

10-12 17:52