You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by da...@apache.org on 2013/11/21 13:17:04 UTC

svn commit: r1544153 - in /karaf/trunk/management/boot/src: main/java/org/apache/karaf/management/boot/KarafMBeanServerBuilder.java test/java/org/apache/karaf/management/boot/KarafMBeanServerBuilderTest.java

Author: davidb
Date: Thu Nov 21 12:17:03 2013
New Revision: 1544153

URL: http://svn.apache.org/r1544153
Log:
[KARAF-2513] management boot can not process MBean without implement DynamicMBean interface

This fixes the issue. The problem was that the InvocationTargetException was't unwrapped before it was passed to the caller.
Verified with the ManagedCamelContext as reported in the bug.
Also added unit test.

Modified:
    karaf/trunk/management/boot/src/main/java/org/apache/karaf/management/boot/KarafMBeanServerBuilder.java
    karaf/trunk/management/boot/src/test/java/org/apache/karaf/management/boot/KarafMBeanServerBuilderTest.java

Modified: karaf/trunk/management/boot/src/main/java/org/apache/karaf/management/boot/KarafMBeanServerBuilder.java
URL: http://svn.apache.org/viewvc/karaf/trunk/management/boot/src/main/java/org/apache/karaf/management/boot/KarafMBeanServerBuilder.java?rev=1544153&r1=1544152&r2=1544153&view=diff
==============================================================================
--- karaf/trunk/management/boot/src/main/java/org/apache/karaf/management/boot/KarafMBeanServerBuilder.java (original)
+++ karaf/trunk/management/boot/src/main/java/org/apache/karaf/management/boot/KarafMBeanServerBuilder.java Thu Nov 21 12:17:03 2013
@@ -16,16 +16,18 @@
  */
 package org.apache.karaf.management.boot;
 
-import javax.management.MBeanServer;
-import javax.management.MBeanServerBuilder;
-import javax.management.MBeanServerDelegate;
 import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import javax.management.MBeanServer;
+import javax.management.MBeanServerBuilder;
+import javax.management.MBeanServerDelegate;
+
 public class KarafMBeanServerBuilder extends MBeanServerBuilder {
 
     private static volatile InvocationHandler guard;
@@ -60,9 +62,11 @@ public class KarafMBeanServerBuilder ext
                 }
                 guard.invoke(proxy, method, args);
             }
-            return method.invoke(wrapped, args);
+            try {
+                return method.invoke(wrapped, args);
+            } catch (InvocationTargetException ite) {
+                throw ite.getCause();
+            }
         }
-
     }
-
 }

Modified: karaf/trunk/management/boot/src/test/java/org/apache/karaf/management/boot/KarafMBeanServerBuilderTest.java
URL: http://svn.apache.org/viewvc/karaf/trunk/management/boot/src/test/java/org/apache/karaf/management/boot/KarafMBeanServerBuilderTest.java?rev=1544153&r1=1544152&r2=1544153&view=diff
==============================================================================
--- karaf/trunk/management/boot/src/test/java/org/apache/karaf/management/boot/KarafMBeanServerBuilderTest.java (original)
+++ karaf/trunk/management/boot/src/test/java/org/apache/karaf/management/boot/KarafMBeanServerBuilderTest.java Thu Nov 21 12:17:03 2013
@@ -16,17 +16,21 @@
  */
 package org.apache.karaf.management.boot;
 
-import junit.framework.TestCase;
-import org.easymock.EasyMock;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.management.AttributeList;
 import javax.management.InstanceNotFoundException;
 import javax.management.MBeanServer;
+import javax.management.NotCompliantMBeanException;
 import javax.management.ObjectName;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.easymock.EasyMock;
+
 
 public class KarafMBeanServerBuilderTest extends TestCase {
 
@@ -148,6 +152,22 @@ public class KarafMBeanServerBuilderTest
         }
     }
 
+    public void testMBeanServerThrowsException() throws Exception {
+        MBeanServer mbs = EasyMock.createMock(MBeanServer.class);
+        EasyMock.replay(mbs);
+
+        KarafMBeanServerBuilder mbsb = new KarafMBeanServerBuilder();
+        MBeanServer kmbs = mbsb.newMBeanServer("test", mbs, null);
+
+        try {
+            kmbs.registerMBean("Foo", ObjectName.getInstance("foo.bar:type=TestObject"));
+        } catch (NotCompliantMBeanException ncme) {
+            // good
+            return;
+        }
+        fail("Should have thrown a NotCompliantMBeanException");
+    }
+
     private Throwable getInnermostException(Throwable th) {
         if (th.getCause() != null) {
             return getInnermostException(th.getCause());