Browse Source

Defensive error reporting when StandardAnnotationMetadata introspects declared methods

Issue: SPR-13791
(cherry picked from commit a36c0a5)
pull/941/head
Juergen Hoeller 9 years ago
parent
commit
bc492b9251
  1. 2
      spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java
  2. 34
      spring-core/src/main/java/org/springframework/core/type/StandardAnnotationMetadata.java

2
spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java

@ -163,7 +163,7 @@ public class AnnotatedElementUtils { @@ -163,7 +163,7 @@ public class AnnotatedElementUtils {
new HashSet<AnnotatedElement>(), 0);
}
catch (Throwable ex) {
throw new IllegalStateException("Failed to introspect annotations: " + element, ex);
throw new IllegalStateException("Failed to introspect annotations on " + element, ex);
}
}

34
spring-core/src/main/java/org/springframework/core/type/StandardAnnotationMetadata.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -126,25 +126,35 @@ public class StandardAnnotationMetadata extends StandardClassMetadata implements @@ -126,25 +126,35 @@ public class StandardAnnotationMetadata extends StandardClassMetadata implements
@Override
public boolean hasAnnotatedMethods(String annotationType) {
Method[] methods = getIntrospectedClass().getDeclaredMethods();
for (Method method : methods) {
if (!method.isBridge() && AnnotatedElementUtils.isAnnotated(method, annotationType)) {
return true;
try {
Method[] methods = getIntrospectedClass().getDeclaredMethods();
for (Method method : methods) {
if (!method.isBridge() && AnnotatedElementUtils.isAnnotated(method, annotationType)) {
return true;
}
}
return false;
}
catch (Throwable ex) {
throw new IllegalStateException("Failed to introspect annotated methods on " + getIntrospectedClass(), ex);
}
return false;
}
@Override
public Set<MethodMetadata> getAnnotatedMethods(String annotationType) {
Method[] methods = getIntrospectedClass().getDeclaredMethods();
Set<MethodMetadata> annotatedMethods = new LinkedHashSet<MethodMetadata>();
for (Method method : methods) {
if (!method.isBridge() && AnnotatedElementUtils.isAnnotated(method, annotationType)) {
annotatedMethods.add(new StandardMethodMetadata(method, this.nestedAnnotationsAsMap));
try {
Method[] methods = getIntrospectedClass().getDeclaredMethods();
Set<MethodMetadata> annotatedMethods = new LinkedHashSet<MethodMetadata>();
for (Method method : methods) {
if (!method.isBridge() && AnnotatedElementUtils.isAnnotated(method, annotationType)) {
annotatedMethods.add(new StandardMethodMetadata(method, this.nestedAnnotationsAsMap));
}
}
return annotatedMethods;
}
catch (Throwable ex) {
throw new IllegalStateException("Failed to introspect annotated methods on " + getIntrospectedClass(), ex);
}
return annotatedMethods;
}
}

Loading…
Cancel
Save