提交 8c1bea7c 编写于 作者: E emcmanus

6750935: The expected NotCompliantMBeanException is not thrown for the custom MXBeanMappingFactory

6751872: MXBeanMappingFactory example says "implements" when it should be "extends"
Reviewed-by: dfuchs
上级 f93ffb4f
...@@ -228,7 +228,15 @@ public class Introspector { ...@@ -228,7 +228,15 @@ public class Introspector {
// to generate the appropriate exception. // to generate the appropriate exception.
} }
if (c != null) { 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); return new MXBeanSupport(mbean, c, factory);
} }
checkCompliance(mbeanClass); checkCompliance(mbeanClass);
......
...@@ -36,7 +36,6 @@ import javax.management.MBeanServer; ...@@ -36,7 +36,6 @@ import javax.management.MBeanServer;
import javax.management.NotCompliantMBeanException; import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName; import javax.management.ObjectName;
import javax.management.openmbean.MXBeanMappingFactory; import javax.management.openmbean.MXBeanMappingFactory;
import javax.management.openmbean.MXBeanMappingFactoryClass;
/** /**
* Base class for MXBeans. * Base class for MXBeans.
......
...@@ -48,7 +48,7 @@ import java.lang.reflect.Type; ...@@ -48,7 +48,7 @@ import java.lang.reflect.Type;
* effect by defining {@code MyLinkedListMappingFactory} as follows:</p> * effect by defining {@code MyLinkedListMappingFactory} as follows:</p>
* *
* <pre> * <pre>
* public class MyLinkedListMappingFactory implements MXBeanMappingFactory { * public class MyLinkedListMappingFactory extends MXBeanMappingFactory {
* public MyLinkedListMappingFactory() {} * public MyLinkedListMappingFactory() {}
* *
* public MXBeanMapping mappingForType(Type t, MXBeanMappingFactory f) * public MXBeanMapping mappingForType(Type t, MXBeanMappingFactory f)
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
*/ */
/* @test %M% %I% /* @test %M% %I%
* @bug 6562936 * @bug 6562936 6750935
* @run compile customtypes/package-info.java * @run compile customtypes/package-info.java
* @run main CustomTypeTest * @run main CustomTypeTest
*/ */
...@@ -342,6 +342,38 @@ public class 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 { public static void main(String[] args) throws Exception {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
...@@ -407,8 +439,10 @@ public class CustomTypeTest { ...@@ -407,8 +439,10 @@ public class CustomTypeTest {
try { try {
mbs.registerMBean(new ReallyBrokenImpl(), new ObjectName("d:type=Broken")); mbs.registerMBean(new ReallyBrokenImpl(), new ObjectName("d:type=Broken"));
fail("Register did not throw exception"); fail("Register did not throw exception");
} catch (IllegalArgumentException e) { } catch (NotCompliantMBeanException e) {
System.out.println("...OK: threw: " + e); System.out.println("...OK: threw: " + e);
} catch (Exception e) {
fail("Register threw wrong exception: " + e);
} }
System.out.println("Test MXBeanMappingFactory exception with StandardMBean"); System.out.println("Test MXBeanMappingFactory exception with StandardMBean");
...@@ -433,6 +467,24 @@ public class CustomTypeTest { ...@@ -433,6 +467,24 @@ public class CustomTypeTest {
System.out.println("...OK: threw: " + e); 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) if (failure == null)
System.out.println("TEST PASSED"); System.out.println("TEST PASSED");
else else
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册