Skip to content

Commit c2a125d

Browse files
artembilangaryrussell
authored andcommitted
GH-842: Fix NPEs in KafkaListenerAnnotationBPP (#864)
* GH-842: Fix NPEs in KafkaListenerAnnotationBPP Fixes #842 **Cherry-pick to 2.1.x, 2.0.x and 1.3.x** * * Move null check to the `else` branch * * Do not use `if (resolved == null)` at all
1 parent a50a2a9 commit c2a125d

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

spring-kafka/src/main/java/org/springframework/kafka/annotation/KafkaListenerAnnotationBeanPostProcessor.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ public Object postProcessAfterInitialization(final Object bean, final String bea
242242
Class<?> targetClass = AopUtils.getTargetClass(bean);
243243
Collection<KafkaListener> classLevelListeners = findListenerAnnotations(targetClass);
244244
final boolean hasClassLevelListeners = classLevelListeners.size() > 0;
245-
final List<Method> multiMethods = new ArrayList<Method>();
245+
final List<Method> multiMethods = new ArrayList<>();
246246
Map<Method, Set<KafkaListener>> annotatedMethods = MethodIntrospector.selectMethods(targetClass,
247247
new MethodIntrospector.MetadataLookup<Set<KafkaListener>>() {
248248

@@ -295,7 +295,7 @@ public boolean matches(Method method) {
295295
* AnnotationUtils.getRepeatableAnnotations does not look at interfaces
296296
*/
297297
private Collection<KafkaListener> findListenerAnnotations(Class<?> clazz) {
298-
Set<KafkaListener> listeners = new HashSet<KafkaListener>();
298+
Set<KafkaListener> listeners = new HashSet<>();
299299
KafkaListener ann = AnnotationUtils.findAnnotation(clazz, KafkaListener.class);
300300
if (ann != null) {
301301
listeners.add(ann);
@@ -325,12 +325,13 @@ private Set<KafkaListener> findListenerAnnotations(Method method) {
325325

326326
private void processMultiMethodListeners(Collection<KafkaListener> classLevelListeners, List<Method> multiMethods,
327327
Object bean, String beanName) {
328-
List<Method> checkedMethods = new ArrayList<Method>();
328+
329+
List<Method> checkedMethods = new ArrayList<>();
329330
for (Method method : multiMethods) {
330331
checkedMethods.add(checkProxy(method, bean));
331332
}
332333
for (KafkaListener classLevelListener : classLevelListeners) {
333-
MultiMethodKafkaListenerEndpoint<K, V> endpoint = new MultiMethodKafkaListenerEndpoint<K, V>(checkedMethods,
334+
MultiMethodKafkaListenerEndpoint<K, V> endpoint = new MultiMethodKafkaListenerEndpoint<>(checkedMethods,
334335
bean);
335336
endpoint.setBeanFactory(this.beanFactory);
336337
processListener(endpoint, classLevelListener, bean, bean.getClass(), beanName);
@@ -339,7 +340,7 @@ private void processMultiMethodListeners(Collection<KafkaListener> classLevelLis
339340

340341
protected void processKafkaListener(KafkaListener kafkaListener, Method method, Object bean, String beanName) {
341342
Method methodToUse = checkProxy(method, bean);
342-
MethodKafkaListenerEndpoint<K, V> endpoint = new MethodKafkaListenerEndpoint<K, V>();
343+
MethodKafkaListenerEndpoint<K, V> endpoint = new MethodKafkaListenerEndpoint<>();
343344
endpoint.setMethod(methodToUse);
344345
endpoint.setBeanFactory(this.beanFactory);
345346
String errorHandlerBeanName = resolveExpressionAsString(kafkaListener.errorHandler(), "errorHandler");
@@ -469,7 +470,7 @@ private Pattern resolvePattern(KafkaListener kafkaListener) {
469470
else if (resolved instanceof String) {
470471
pattern = Pattern.compile((String) resolved);
471472
}
472-
else {
473+
else if (resolved != null) {
473474
throw new IllegalStateException(
474475
"topicPattern must resolve to a Pattern or String, not " + resolved.getClass());
475476
}
@@ -610,10 +611,11 @@ private String resolveExpressionAsString(String value, String attribute) {
610611
if (resolved instanceof String) {
611612
return (String) resolved;
612613
}
613-
else {
614+
else if (resolved != null) {
614615
throw new IllegalStateException("The [" + attribute + "] must resolve to a String. "
615616
+ "Resolved to [" + resolved.getClass() + "] for [" + value + "]");
616617
}
618+
return null;
617619
}
618620

619621
private Object resolveExpression(String value) {

0 commit comments

Comments
 (0)