如何处理jersey client 1.8中读取超时异常

How to handle read timeout exception in jersey client 1.8

我正在使用jersey 1.8

调用外部服务。 这是我的代码。

 try{
     ClientResponse response = webResource.header(HttpHeaders.AUTHORIZATION, encodedHashString).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse.class, formData);
 }catch(ClientHandlerException che){
   //handelling code here
 {

当发生读取超时异常时,它给出 ClientHandlerException 并且底层异常是 SocketTimeoutException。但这里的问题是我不能只说因为它 ClientHandlerException 它是一个超时异常,因为这个异常可能发生在其他与客户端相关的错误上。 处理它的确切代码是什么,如果它是读取超时异常,我需要做一些处理。

尝试这样的事情:

try {
    ClientResponse response = webResource.header(HttpHeaders.AUTHORIZATION, encodedHashString).type(MediaType.APPLICATION_FORM_URLENCODED_TYPE).post(ClientResponse.class, formData);
} catch(ClientHandlerException ex) {
    handleClientHandlerException(ex);
}

private void handleClientHandlerException(ClientHandlerException ex) throws ClientHandlerException {
    if (ex.getCause() instanceof SocketTimeoutException) {
        // handelling SocketTimeoutException code here
    }
    throw ex;
}

handleClientHandlerException 中,如果原因不是 SocketTimeoutException,您也可以从 apache commons lang 中尝试类似 ExceptionUtils#getRootCause 的方法来获取根本原因。

您可以使用 guava 中的 Throwables.getRootCause 方法!