diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MethodInvokingTransformer.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MethodInvokingTransformer.java index 5fbe491afb..c703b80138 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MethodInvokingTransformer.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MethodInvokingTransformer.java @@ -44,6 +44,9 @@ public class MethodInvokingTransformer implements Transformer { public Message transform(Message message) { Object result = this.invoker.invokeMethod(message); + if (result instanceof Message) { + return (Message) result; + } if (result instanceof Properties && !(message.getPayload() instanceof Properties)) { Properties propertiesToSet = (Properties) result; MessageBuilder builder = MessageBuilder.fromMessage(message); @@ -53,7 +56,7 @@ public class MethodInvokingTransformer implements Transformer { } return builder.build(); } - else if (result instanceof Map && !(message.getPayload() instanceof Map)) { + if (result instanceof Map && !(message.getPayload() instanceof Map)) { Map attributesToSet = (Map ) result; MessageBuilder builder = MessageBuilder.fromMessage(message); for (Object key : attributesToSet.keySet()) { @@ -65,9 +68,7 @@ public class MethodInvokingTransformer implements Transformer { } return builder.build(); } - else { - return MessageBuilder.withPayload(result).copyHeaders(message.getHeaders()).build(); - } + return MessageBuilder.withPayload(result).copyHeaders(message.getHeaders()).build(); } } diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/transformer/MethodInvokingTransformerTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/transformer/MethodInvokingTransformerTests.java index 95f6d2f73f..c4542b06f2 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/transformer/MethodInvokingTransformerTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/transformer/MethodInvokingTransformerTests.java @@ -173,6 +173,25 @@ public class MethodInvokingTransformerTests { assertEquals("baz", result.getHeaders().get("prop3")); } + @Test + public void messageReturnValueConfiguredWithMethodReference() throws Exception { + TestBean testBean = new TestBean(); + Method testMethod = testBean.getClass().getMethod("messageReturnValueTest", Message.class); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + Message message = MessageBuilder.withPayload("test").build(); + Message result = transformer.transform(message); + assertEquals("test", result.getPayload()); + } + + @Test + public void messageReturnValueConfiguredWithMethodName() throws Exception { + TestBean testBean = new TestBean(); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "messageReturnValueTest"); + Message message = MessageBuilder.withPayload("test").build(); + Message result = transformer.transform(message); + assertEquals("test", result.getPayload()); + } + @Test @SuppressWarnings("unchecked") public void propertiesPayloadConfiguredWithMethodReference() throws Exception { @@ -246,6 +265,10 @@ public class MethodInvokingTransformerTests { properties.setProperty("prop2", "bar"); return properties; } + + public Message messageReturnValueTest(Message message) { + return message; + } } }