我正在使用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。
答案 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方法!