Falko Modler created DELTASPIKE-984: ---------------------------------------
Summary: DynamicMBeanWrapper throws misleading MBeanException saying that the required action does not exist when MBean method (deliberately) throws an exception Key: DELTASPIKE-984 URL: https://issues.apache.org/jira/browse/DELTASPIKE-984 Project: DeltaSpike Issue Type: Bug Components: Core Affects Versions: 1.0.2 Reporter: Falko Modler See {{org.apache.deltaspike.core.impl.jmx.DynamicMBeanWrapper.invoke(String, Object[], String[])}}: {code:java} if (operations.containsKey(actionName)) { final ClassLoader oldCl = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(classloader); try { return operations.get(actionName).invoke(instance(), params); } catch (IllegalArgumentException e) { LOGGER.log(Level.SEVERE, actionName + "can't be invoked", e); } catch (IllegalAccessException e) { LOGGER.log(Level.SEVERE, actionName + "can't be invoked", e); } catch (InvocationTargetException e) { LOGGER.log(Level.SEVERE, actionName + "can't be invoked", e); } finally { Thread.currentThread().setContextClassLoader(oldCl); } } throw new MBeanException(new IllegalArgumentException(), actionName + " doesn't exist"); {code} When the MBean method throws an exception, the wrapper catches and logs the {{InvocationTargetException}}. But as the last step a {{MBeanException}} with cause {{actionName + " doesn't exist"}} is thrown, regardless of what went wrong actually! The "doesn't exist" exception should be moved into an else block. The specificly caught exception should be wrapped into a new {{MBeanException}} which should be thrown afterwards. If wrapping is not possible due to classloadings constraints, at least the message of the original exception should be retained. -- This message was sent by Atlassian JIRA (v6.3.4#6332)