aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremcmanus <none@none>2008-09-24 15:19:07 +0200
committeremcmanus <none@none>2008-09-24 15:19:07 +0200
commit00869a7c62007c6be5abc57a7c81639c733a4720 (patch)
treed2982103d9744aac1263ba319619d8b03f8ebe98
parent72b7735b0a3c857c88848405cbe22c912a7549a3 (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
-rw-r--r--src/share/classes/com/sun/jmx/mbeanserver/Introspector.java10
-rw-r--r--src/share/classes/com/sun/jmx/mbeanserver/MXBeanSupport.java1
-rw-r--r--src/share/classes/javax/management/openmbean/MXBeanMappingFactory.java2
-rw-r--r--test/javax/management/mxbean/CustomTypeTest.java56
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