8008611: Better handling of annotations in JMX
Reviewed-by: skoivu, dholmes, jfdenise
--- a/jdk/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java Tue Apr 02 10:38:51 2013 +0200
+++ b/jdk/src/share/classes/com/sun/jmx/mbeanserver/Introspector.java Thu Mar 21 13:56:28 2013 +0100
@@ -378,13 +378,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?