revised Hessian/Burlap exception clauses (SPR-5897)

This commit is contained in:
Juergen Hoeller 2009-09-23 19:35:44 +00:00
parent 2bd30a49ad
commit 64bf3b74b5
2 changed files with 26 additions and 17 deletions

View File

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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()); return invocation.getMethod().invoke(this.burlapProxy, invocation.getArguments());
} }
catch (InvocationTargetException ex) { catch (InvocationTargetException ex) {
if (ex.getTargetException() instanceof BurlapRuntimeException) { Throwable targetEx = ex.getTargetException();
BurlapRuntimeException bre = (BurlapRuntimeException) ex.getTargetException(); if (targetEx instanceof BurlapRuntimeException) {
Throwable rootCause = (bre.getRootCause() != null ? bre.getRootCause() : bre); Throwable cause = targetEx.getCause();
throw convertBurlapAccessException(rootCause); throw convertBurlapAccessException(cause != null ? cause : targetEx);
} }
else if (ex.getTargetException() instanceof UndeclaredThrowableException) { else if (targetEx instanceof UndeclaredThrowableException) {
UndeclaredThrowableException utex = (UndeclaredThrowableException) ex.getTargetException(); UndeclaredThrowableException utex = (UndeclaredThrowableException) targetEx;
throw convertBurlapAccessException(utex.getUndeclaredThrowable()); throw convertBurlapAccessException(utex.getUndeclaredThrowable());
} }
throw ex.getTargetException(); else {
throw targetEx;
}
} }
catch (Throwable ex) { catch (Throwable ex) {
throw new RemoteProxyFailureException( throw new RemoteProxyFailureException(

View File

@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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.ConnectException;
import java.net.MalformedURLException; 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.HessianProxyFactory;
import com.caucho.hessian.client.HessianRuntimeException; import com.caucho.hessian.client.HessianRuntimeException;
import com.caucho.hessian.io.SerializerFactory; import com.caucho.hessian.io.SerializerFactory;
@ -220,16 +222,21 @@ public class HessianClientInterceptor extends UrlBasedRemoteAccessor implements
return invocation.getMethod().invoke(this.hessianProxy, invocation.getArguments()); return invocation.getMethod().invoke(this.hessianProxy, invocation.getArguments());
} }
catch (InvocationTargetException ex) { catch (InvocationTargetException ex) {
if (ex.getTargetException() instanceof HessianRuntimeException) { Throwable targetEx = ex.getTargetException();
HessianRuntimeException hre = (HessianRuntimeException) ex.getTargetException(); if (targetEx instanceof HessianConnectionException) {
Throwable rootCause = (hre.getRootCause() != null ? hre.getRootCause() : hre); throw convertHessianAccessException(targetEx);
throw convertHessianAccessException(rootCause);
} }
else if (ex.getTargetException() instanceof UndeclaredThrowableException) { else if (targetEx instanceof HessianException || targetEx instanceof HessianRuntimeException) {
UndeclaredThrowableException utex = (UndeclaredThrowableException) ex.getTargetException(); Throwable cause = targetEx.getCause();
throw convertHessianAccessException(cause != null ? cause : targetEx);
}
else if (targetEx instanceof UndeclaredThrowableException) {
UndeclaredThrowableException utex = (UndeclaredThrowableException) targetEx;
throw convertHessianAccessException(utex.getUndeclaredThrowable()); throw convertHessianAccessException(utex.getUndeclaredThrowable());
} }
throw ex.getTargetException(); else {
throw targetEx;
}
} }
catch (Throwable ex) { catch (Throwable ex) {
throw new RemoteProxyFailureException( throw new RemoteProxyFailureException(
@ -247,7 +254,7 @@ public class HessianClientInterceptor extends UrlBasedRemoteAccessor implements
* @return the RemoteAccessException to throw * @return the RemoteAccessException to throw
*/ */
protected RemoteAccessException convertHessianAccessException(Throwable ex) { protected RemoteAccessException convertHessianAccessException(Throwable ex) {
if (ex instanceof ConnectException) { if (ex instanceof HessianConnectionException || ex instanceof ConnectException) {
return new RemoteConnectFailureException( return new RemoteConnectFailureException(
"Cannot connect to Hessian remote service at [" + getServiceUrl() + "]", ex); "Cannot connect to Hessian remote service at [" + getServiceUrl() + "]", ex);
} }