OpenJDK / amber / amber
changeset 1322:d038148778cc
6750935: The expected NotCompliantMBeanException is not thrown for the custom MXBeanMappingFactory
6751872: MXBeanMappingFactory example says "implements" when it should be "extends"
Reviewed-by: dfuchs
author | emcmanus |
---|---|
date | Wed, 24 Sep 2008 15:19:07 +0200 |
parents | 36e6632d730b |
children | e14a3b3536cd |
files | jdk/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java jdk/src/share/classes/com/sun/jmx/mbeanserver/MXBeanSupport.java jdk/src/share/classes/javax/management/openmbean/MXBeanMappingFactory.java jdk/test/javax/management/mxbean/CustomTypeTest.java |
diffstat | 4 files changed, 64 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/jdk/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java Wed Sep 24 05:59:26 2008 -0700 +++ b/jdk/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java Wed Sep 24 15:19:07 2008 +0200 @@ -228,7 +228,15 @@ // 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);
--- a/jdk/src/share/classes/com/sun/jmx/mbeanserver/MXBeanSupport.java Wed Sep 24 05:59:26 2008 -0700 +++ b/jdk/src/share/classes/com/sun/jmx/mbeanserver/MXBeanSupport.java Wed Sep 24 15:19:07 2008 +0200 @@ -36,7 +36,6 @@ import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; import javax.management.openmbean.MXBeanMappingFactory; -import javax.management.openmbean.MXBeanMappingFactoryClass; /** * Base class for MXBeans.
--- a/jdk/src/share/classes/javax/management/openmbean/MXBeanMappingFactory.java Wed Sep 24 05:59:26 2008 -0700 +++ b/jdk/src/share/classes/javax/management/openmbean/MXBeanMappingFactory.java Wed Sep 24 15:19:07 2008 +0200 @@ -48,7 +48,7 @@ * 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)
--- a/jdk/test/javax/management/mxbean/CustomTypeTest.java Wed Sep 24 05:59:26 2008 -0700 +++ b/jdk/test/javax/management/mxbean/CustomTypeTest.java Wed Sep 24 15:19:07 2008 +0200 @@ -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 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 @@ 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 @@ 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