From 64bf3b74b5c4eba445b6d283022aa4a84b457789 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 23 Sep 2009 19:35:44 +0000 Subject: [PATCH] revised Hessian/Burlap exception clauses (SPR-5897) --- .../caucho/BurlapClientInterceptor.java | 18 +++++++------ .../caucho/HessianClientInterceptor.java | 25 ++++++++++++------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/org.springframework.web/src/main/java/org/springframework/remoting/caucho/BurlapClientInterceptor.java b/org.springframework.web/src/main/java/org/springframework/remoting/caucho/BurlapClientInterceptor.java index 5e0be9a2e60..0529f38206c 100644 --- a/org.springframework.web/src/main/java/org/springframework/remoting/caucho/BurlapClientInterceptor.java +++ b/org.springframework.web/src/main/java/org/springframework/remoting/caucho/BurlapClientInterceptor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -148,16 +148,18 @@ public class BurlapClientInterceptor extends UrlBasedRemoteAccessor implements M return invocation.getMethod().invoke(this.burlapProxy, invocation.getArguments()); } catch (InvocationTargetException ex) { - if (ex.getTargetException() instanceof BurlapRuntimeException) { - BurlapRuntimeException bre = (BurlapRuntimeException) ex.getTargetException(); - Throwable rootCause = (bre.getRootCause() != null ? bre.getRootCause() : bre); - throw convertBurlapAccessException(rootCause); + Throwable targetEx = ex.getTargetException(); + if (targetEx instanceof BurlapRuntimeException) { + Throwable cause = targetEx.getCause(); + throw convertBurlapAccessException(cause != null ? cause : targetEx); } - else if (ex.getTargetException() instanceof UndeclaredThrowableException) { - UndeclaredThrowableException utex = (UndeclaredThrowableException) ex.getTargetException(); + else if (targetEx instanceof UndeclaredThrowableException) { + UndeclaredThrowableException utex = (UndeclaredThrowableException) targetEx; throw convertBurlapAccessException(utex.getUndeclaredThrowable()); } - throw ex.getTargetException(); + else { + throw targetEx; + } } catch (Throwable ex) { throw new RemoteProxyFailureException( diff --git a/org.springframework.web/src/main/java/org/springframework/remoting/caucho/HessianClientInterceptor.java b/org.springframework.web/src/main/java/org/springframework/remoting/caucho/HessianClientInterceptor.java index 2140f1532f0..c2fc4b282e2 100644 --- a/org.springframework.web/src/main/java/org/springframework/remoting/caucho/HessianClientInterceptor.java +++ b/org.springframework.web/src/main/java/org/springframework/remoting/caucho/HessianClientInterceptor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2009 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,8 @@ import java.lang.reflect.UndeclaredThrowableException; import java.net.ConnectException; import java.net.MalformedURLException; +import com.caucho.hessian.HessianException; +import com.caucho.hessian.client.HessianConnectionException; import com.caucho.hessian.client.HessianProxyFactory; import com.caucho.hessian.client.HessianRuntimeException; import com.caucho.hessian.io.SerializerFactory; @@ -220,16 +222,21 @@ public class HessianClientInterceptor extends UrlBasedRemoteAccessor implements return invocation.getMethod().invoke(this.hessianProxy, invocation.getArguments()); } catch (InvocationTargetException ex) { - if (ex.getTargetException() instanceof HessianRuntimeException) { - HessianRuntimeException hre = (HessianRuntimeException) ex.getTargetException(); - Throwable rootCause = (hre.getRootCause() != null ? hre.getRootCause() : hre); - throw convertHessianAccessException(rootCause); + Throwable targetEx = ex.getTargetException(); + if (targetEx instanceof HessianConnectionException) { + throw convertHessianAccessException(targetEx); } - else if (ex.getTargetException() instanceof UndeclaredThrowableException) { - UndeclaredThrowableException utex = (UndeclaredThrowableException) ex.getTargetException(); + else if (targetEx instanceof HessianException || targetEx instanceof HessianRuntimeException) { + Throwable cause = targetEx.getCause(); + throw convertHessianAccessException(cause != null ? cause : targetEx); + } + else if (targetEx instanceof UndeclaredThrowableException) { + UndeclaredThrowableException utex = (UndeclaredThrowableException) targetEx; throw convertHessianAccessException(utex.getUndeclaredThrowable()); } - throw ex.getTargetException(); + else { + throw targetEx; + } } catch (Throwable ex) { throw new RemoteProxyFailureException( @@ -247,7 +254,7 @@ public class HessianClientInterceptor extends UrlBasedRemoteAccessor implements * @return the RemoteAccessException to throw */ protected RemoteAccessException convertHessianAccessException(Throwable ex) { - if (ex instanceof ConnectException) { + if (ex instanceof HessianConnectionException || ex instanceof ConnectException) { return new RemoteConnectFailureException( "Cannot connect to Hessian remote service at [" + getServiceUrl() + "]", ex); }