diff options
author | Robert Gemmell <robbie@apache.org> | 2012-08-03 16:01:01 +0000 |
---|---|---|
committer | Robert Gemmell <robbie@apache.org> | 2012-08-03 16:01:01 +0000 |
commit | f8ffd3550ff419132e93e51374adcb4150d98f86 (patch) | |
tree | 9e69f7e054bf0121829a924b12c42cabf3afa017 | |
parent | 24429443745b108023722ea24ecde812f01377ac (diff) | |
download | qpid-python-f8ffd3550ff419132e93e51374adcb4150d98f86.tar.gz |
QPID-4188: add fallback exception/error logging to MBeanInvocationHandlerImpl
Applied patch from Philip Harvey <phil@philharveyonline.com> and Oleksandr Rudyy<orudyy@gmail.com>
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1369065 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java index 2dc97cef49..a2a0d2d093 100644 --- a/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java +++ b/qpid/java/broker-plugins/management-jmx/src/main/java/org/apache/qpid/server/jmx/MBeanInvocationHandlerImpl.java @@ -39,6 +39,7 @@ import javax.management.MBeanServer; import javax.management.Notification; import javax.management.NotificationListener; import javax.management.ObjectName; +import javax.management.RuntimeErrorException; import javax.management.remote.JMXConnectionNotification; import javax.management.remote.JMXPrincipal; import javax.management.remote.MBeanServerForwarder; @@ -49,6 +50,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.security.AccessControlContext; import java.security.AccessController; +import java.util.Arrays; import java.util.Map; import java.util.Set; @@ -170,7 +172,30 @@ public class MBeanInvocationHandlerImpl implements InvocationHandler, Notificati } catch (InvocationTargetException e) { - throw e.getTargetException(); + Throwable targetException = e.getCause(); + logTargetException(method, args, targetException); + throw targetException; + } + } + + private void logTargetException(Method method, Object[] args, Throwable targetException) + { + Throwable error = null; + if (targetException instanceof RuntimeErrorException) + { + error = ((RuntimeErrorException)targetException).getCause(); + } + else if (targetException instanceof Error) + { + error = targetException; + } + if (error == null) + { + _logger.debug("Exception was thrown on invoking of " + method + " with arguments " + Arrays.toString(args), targetException); + } + else + { + _logger.error("Unexpected error occured on invoking of " + method + " with arguments " + Arrays.toString(args), targetException); } } |