Yellow Diamond Yellow Diamond - 4 months ago 49
Java Question

How to handle read timeout exception in jersey client 1.8

I am using

jersey 1.8


to call an external service.
Here is my code.

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


when read timeout exception occurs it gives
ClientHandlerException
and underlying exception is
SocketTimeoutException
. But question here is I can not just say that since its
ClientHandlerException
it is a timeout exception because this exception can happen for other client related errors.
what can be the exact code to handle it, I need to do some handeling if its a read timeout exception.

Answer

Try something like this:

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;
}

In handleClientHandlerException you also can try something like ExceptionUtils#getRootCause from apache commons lang if cause isn't SocketTimeoutException to get the root cause.