java jersey 对 SocketTimeoutException 的重试请求

jam*_*234 1 java jersey request jersey-client jersey-2.0

我有一个 Jersey 客户端,想要实现重试SocketTimeoutException,这是我在服务器日志上看到的错误。代码框架如下。webtarget是一个javax.ws.rs.client.WebTarget已定义 url 路径和 queryparams 的实例。我面临的问题是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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

jam*_*234 5

我最终找到了解决方案。事实证明,SocketTimeoutException被映射到了ProcessingExceptionJersey 客户端实际抛出的 。所以下面的代码有效

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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)