8008611: Better handling of annotations in JMX

Reviewed-by: skoivu, dholmes, jfdenise
This commit is contained in:
Erik Gahlin 2013-03-21 13:56:28 +01:00
parent 30245ce543
commit 62fb07baaa

View File

@ -378,13 +378,19 @@ public class Introspector {
for (Annotation a : annots) { for (Annotation a : annots) {
Class<? extends Annotation> c = a.annotationType(); Class<? extends Annotation> c = a.annotationType();
Method[] elements = c.getMethods(); Method[] elements = c.getMethods();
boolean packageAccess = false;
for (Method element : elements) { for (Method element : elements) {
DescriptorKey key = element.getAnnotation(DescriptorKey.class); DescriptorKey key = element.getAnnotation(DescriptorKey.class);
if (key != null) { if (key != null) {
String name = key.value(); String name = key.value();
Object value; Object value;
try { 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) { } catch (RuntimeException e) {
// we don't expect this - except for possibly // we don't expect this - except for possibly
// security exceptions? // security exceptions?