From ab9cf91803ba83f6a101f6a93581e040a69459ff Mon Sep 17 00:00:00 2001 From: Marius Bogoevici Date: Mon, 6 Feb 2017 00:17:26 -0500 Subject: [PATCH] Allow `StreamListenerParameterAdapter` to be applied more broadly Fix #890 --- ...eamListenerAnnotationBeanPostProcessor.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/StreamListenerAnnotationBeanPostProcessor.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/StreamListenerAnnotationBeanPostProcessor.java index e54543a4c..65c3d9cca 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/StreamListenerAnnotationBeanPostProcessor.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/binding/StreamListenerAnnotationBeanPostProcessor.java @@ -271,16 +271,16 @@ public class StreamListenerAnnotationBeanPostProcessor if (targetReferenceValue != null) { Assert.isInstanceOf(String.class, targetReferenceValue, "Annotation value must be a String"); Object targetBean = this.applicationContext.getBean((String) targetReferenceValue); - if (parameterType.isAssignableFrom(targetBean.getClass())) { - arguments[parameterIndex] = targetBean; + // Iterate existing parameter adapters first + for (StreamListenerParameterAdapter streamListenerParameterAdapter : this.streamListenerParameterAdapters) { + if (streamListenerParameterAdapter.supports(targetBean.getClass(), methodParameter)) { + arguments[parameterIndex] = streamListenerParameterAdapter.adapt(targetBean, methodParameter); + break; + } } - else { - for (StreamListenerParameterAdapter streamListenerParameterAdapter : this.streamListenerParameterAdapters) { - if (streamListenerParameterAdapter.supports(targetBean.getClass(), methodParameter)) { - arguments[parameterIndex] = streamListenerParameterAdapter.adapt(targetBean, - methodParameter); - break; - } + if (arguments[parameterIndex] == null) { + if (parameterType.isAssignableFrom(targetBean.getClass())) { + arguments[parameterIndex] = targetBean; } } Assert.notNull(arguments[parameterIndex], "Cannot convert argument " + parameterIndex + " of " + method