Nirmal Mangal
Nirmal Mangal

Reputation: 812

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.

Upvotes: 3

Views: 8238

Answers (2)

Bruno Ribeiro
Bruno Ribeiro

Reputation: 6197

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.

Upvotes: 5

Tom Van Rossom
Tom Van Rossom

Reputation: 1470

You can use the Throwables.getRootCause method from guava!

Upvotes: -1

Related Questions