Reputation: 812
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
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
Reputation: 1470
You can use the Throwables.getRootCause method from guava!
Upvotes: -1