如何在jersey客户端1.8中处理读取超时异常

时间:2015-01-25 02:58:14

标签: java jersey-client

我正在使用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因为它是一个超时异常,因为这个异常可能发生在其他客户端相关的错误上。 什么可以是处理它的确切代码,如果它是一个读取超时异常,我需要做一些handeling。

2 个答案:

答案 0 :(得分: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中你也可以尝试使用apache commons lang中的ExceptionUtils#getRootCause,如果因为没有SocketTimeoutException来找到根本原因。

答案 1 :(得分:0)

您可以使用番石榴的Throwables.getRootCause方法!