2015-01-25 17 views
2

Я использую jersey 1.8Как обрабатывать таймаут исключение в джерси клиента 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 это исключение тайм-аута, поскольку это исключение может случиться для других ошибок, связанных с клиентом. Какой может быть точный код для его обработки, мне нужно сделать некоторые обработки, если это исключение таймаута чтения.

ответ

3

Попробуйте что-то вроде этого:

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 вы также можете попробовать что-то вроде ExceptionUtils#getRootCause от Apache Commons Ланг, если причина не SocketTimeoutException, чтобы получить основную причину.

+0

Спасибо, Бруно, это сработало как шарм. –