changeset 5340:1bb3a6125387

8008611: Better handling of annotations in JMX Reviewed-by: skoivu, dholmes, jfdenise
author egahlin
date Thu, 21 Mar 2013 13:56:28 +0100
parents 2a2d96405f73
children 98ce5da895f7
files src/share/classes/com/sun/jmx/mbeanserver/Introspector.java
diffstat 1 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java	Thu Mar 14 14:45:55 2013 +0100
+++ b/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java	Thu Mar 21 13:56:28 2013 +0100
@@ -375,13 +375,19 @@
         for (Annotation a : annots) {
             Class<? extends Annotation> c = a.annotationType();
             Method[] elements = c.getMethods();
+            boolean packageAccess = false;
             for (Method element : elements) {
                 DescriptorKey key = element.getAnnotation(DescriptorKey.class);
                 if (key != null) {
                     String name = key.value();
                     Object value;
                     try {
-                        value = element.invoke(a);
+                        // Avoid checking access more than once per annotation
+                        if (!packageAccess) {
+                            ReflectUtil.checkPackageAccess(c);
+                            packageAccess = true;
+                        }
+                        value = MethodUtil.invoke(element, a, null);
                     } catch (RuntimeException e) {
                         // we don't expect this - except for possibly
                         // security exceptions?