diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/handler/MethodInvokingMessageProcessor.java b/org.springframework.integration/src/main/java/org/springframework/integration/handler/MethodInvokingMessageProcessor.java index 95102e86fe..d457cf08c5 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/handler/MethodInvokingMessageProcessor.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/handler/MethodInvokingMessageProcessor.java @@ -340,7 +340,9 @@ public class MethodInvokingMessageProcessor implements MessageProcessor { if (StringUtils.hasText(qualifierExpression)) { sb.append("." + qualifierExpression); } - this.setExclusiveTargetParameterType(parameterType); + if (!StringUtils.hasText(qualifierExpression)) { + this.setExclusiveTargetParameterType(parameterType); + } } else if (annotationType.equals(Headers.class)) { Assert.isTrue(Map.class.isAssignableFrom(parameterType), diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/message/PayloadAndHeaderMappingTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/message/PayloadAndHeaderMappingTests.java index 1f323d2c01..07462d0365 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/message/PayloadAndHeaderMappingTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/message/PayloadAndHeaderMappingTests.java @@ -32,6 +32,7 @@ import org.junit.Test; import org.springframework.integration.annotation.Header; import org.springframework.integration.annotation.Headers; +import org.springframework.integration.annotation.Payload; import org.springframework.integration.core.Message; import org.springframework.integration.handler.ServiceActivatingHandler; @@ -670,6 +671,19 @@ public class PayloadAndHeaderMappingTests { assertNull(bean.lastHeaders.get("bar")); } + @Test + public void twoPayloadExpressions() throws Exception { + MessageHandler handler = this.getHandler("twoPayloadExpressions", String.class, String.class); + Map payload = new HashMap(); + payload.put("foo", new Integer(123)); + payload.put("bar", new Integer(456)); + Message message = MessageBuilder.withPayload(payload).build(); + handler.handleMessage(message); + assertNull(bean.lastHeaders); + assertNotNull(bean.lastPayload); + assertEquals("123456", bean.lastPayload); + } + private ServiceActivatingHandler getHandler(String methodName, Class... types) throws Exception { return new ServiceActivatingHandler(bean, TestBean.class.getMethod(methodName, types)); @@ -835,6 +849,10 @@ public class PayloadAndHeaderMappingTests { public void singleObjectHeaderOnly(@Header("foo") Object o) { this.lastHeaders = Collections.singletonMap("foo", o); } + + public void twoPayloadExpressions(@Payload("foo") String foo, @Payload("bar") String bar) { + this.lastPayload = foo + bar; + } } }