diff options
author | emcmanus <none@none> | 2008-09-24 15:19:07 +0200 |
---|---|---|
committer | emcmanus <none@none> | 2008-09-24 15:19:07 +0200 |
commit | 00869a7c62007c6be5abc57a7c81639c733a4720 (patch) | |
tree | d2982103d9744aac1263ba319619d8b03f8ebe98 | |
parent | 72b7735b0a3c857c88848405cbe22c912a7549a3 (diff) |
6750935: The expected NotCompliantMBeanException is not thrown for the custom MXBeanMappingFactory
6751872: MXBeanMappingFactory example says "implements" when it should be "extends"
Reviewed-by: dfuchs
4 files changed, 64 insertions, 5 deletions
diff --git a/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java b/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java index 1554444f5..52783fd5a 100644 --- a/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java +++ b/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java @@ -228,7 +228,15 @@ public class Introspector { // to generate the appropriate exception. } if (c != null) { - MXBeanMappingFactory factory = MXBeanMappingFactory.forInterface(c); + MXBeanMappingFactory factory; + try { + factory = MXBeanMappingFactory.forInterface(c); + } catch (IllegalArgumentException e) { + NotCompliantMBeanException ncmbe = + new NotCompliantMBeanException(e.getMessage()); + ncmbe.initCause(e); + throw ncmbe; + } return new MXBeanSupport(mbean, c, factory); } checkCompliance(mbeanClass); diff --git a/src/share/classes/com/sun/jmx/mbeanserver/MXBeanSupport.java b/src/share/classes/com/sun/jmx/mbeanserver/MXBeanSupport.java index 594a97334..7a9c5d2e7 100644 --- a/src/share/classes/com/sun/jmx/mbeanserver/MXBeanSupport.java +++ b/src/share/classes/com/sun/jmx/mbeanserver/MXBeanSupport.java @@ -36,7 +36,6 @@ import javax.management.MBeanServer; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; import javax.management.openmbean.MXBeanMappingFactory; -import javax.management.openmbean.MXBeanMappingFactoryClass; /** * Base class for MXBeans. diff --git a/src/share/classes/javax/management/openmbean/MXBeanMappingFactory.java b/src/share/classes/javax/management/openmbean/MXBeanMappingFactory.java index d5808c3a1..f1dc6bcc0 100644 --- a/src/share/classes/javax/management/openmbean/MXBeanMappingFactory.java +++ b/src/share/classes/javax/management/openmbean/MXBeanMappingFactory.java @@ -48,7 +48,7 @@ import java.lang.reflect.Type; * effect by defining {@code MyLinkedListMappingFactory} as follows:</p> * * <pre> - * public class MyLinkedListMappingFactory implements MXBeanMappingFactory { + * public class MyLinkedListMappingFactory extends MXBeanMappingFactory { * public MyLinkedListMappingFactory() {} * * public MXBeanMapping mappingForType(Type t, MXBeanMappingFactory f) diff --git a/test/javax/management/mxbean/CustomTypeTest.java b/test/javax/management/mxbean/CustomTypeTest.java index ccf192ab5..6da91330c 100644 --- a/test/javax/management/mxbean/CustomTypeTest.java +++ b/test/javax/management/mxbean/CustomTypeTest.java @@ -22,7 +22,7 @@ */ /* @test %M% %I% - * @bug 6562936 + * @bug 6562936 6750935 * @run compile customtypes/package-info.java * @run main CustomTypeTest */ @@ -342,6 +342,38 @@ public class CustomTypeTest { } } + public static class BadConstructorMXBeanMappingFactory1 extends + MXBeanMappingFactory { + private BadConstructorMXBeanMappingFactory1() {} + + @Override + public MXBeanMapping mappingForType(Type arg0, MXBeanMappingFactory arg1) + throws OpenDataException { + throw new UnsupportedOperationException("Should not be called"); + } + } + + public static class BadConstructorMXBeanMappingFactory2 extends + MXBeanMappingFactory { + public BadConstructorMXBeanMappingFactory2(boolean oops) {} + + @Override + public MXBeanMapping mappingForType(Type arg0, MXBeanMappingFactory arg1) + throws OpenDataException { + throw new UnsupportedOperationException("Should not be called"); + } + } + + @MXBeanMappingFactoryClass(BadConstructorMXBeanMappingFactory1.class) + public static interface BadConstructor1MXBean {} + + public static class BadConstructor1 implements BadConstructor1MXBean {} + + @MXBeanMappingFactoryClass(BadConstructorMXBeanMappingFactory2.class) + public static interface BadConstructor2MXBean {} + + public static class BadConstructor2 implements BadConstructor2MXBean {} + public static void main(String[] args) throws Exception { MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); @@ -407,8 +439,10 @@ public class CustomTypeTest { try { mbs.registerMBean(new ReallyBrokenImpl(), new ObjectName("d:type=Broken")); fail("Register did not throw exception"); - } catch (IllegalArgumentException e) { + } catch (NotCompliantMBeanException e) { System.out.println("...OK: threw: " + e); + } catch (Exception e) { + fail("Register threw wrong exception: " + e); } System.out.println("Test MXBeanMappingFactory exception with StandardMBean"); @@ -433,6 +467,24 @@ public class CustomTypeTest { System.out.println("...OK: threw: " + e); } + System.out.println("Test MXBeanMappingFactoryClass constructor exception"); + for (Object mbean : new Object[] { + new BadConstructor1(), new BadConstructor2(), + }) { + String testName = mbean.getClass().getSimpleName(); + try { + ObjectName name = new ObjectName("d:type=" + testName); + mbs.registerMBean(mbean, name); + fail("Broken MXBeanMappingFactoryClass did not throw exception" + + " (" + testName + ")"); + } catch (NotCompliantMBeanException e) { + System.out.println("...OK: " + testName + " threw: " + e); + } catch (Exception e) { + fail("Broken MXBeanMappingFactoryClass " + testName + " threw " + + "wrong exception: " + e); + } + } + if (failure == null) System.out.println("TEST PASSED"); else |