diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/TransformerFactoryBean.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/TransformerFactoryBean.java index 611abecf8b..055dd64987 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/TransformerFactoryBean.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/TransformerFactoryBean.java @@ -17,6 +17,7 @@ package org.springframework.integration.config; import org.springframework.integration.handler.ExpressionEvaluatingMessageProcessor; +import org.springframework.integration.handler.MessageMappingMethodInvoker; import org.springframework.integration.handler.MessageProcessor; import org.springframework.integration.message.MessageHandler; import org.springframework.integration.transformer.MessageTransformingHandler; @@ -40,10 +41,13 @@ public class TransformerFactoryBean extends AbstractMessageHandlerFactoryBean { transformer = (Transformer) targetObject; } else if (StringUtils.hasText(targetMethodName)) { - transformer = new MethodInvokingTransformer(targetObject, targetMethodName); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(targetObject, targetMethodName); + transformer = new MethodInvokingTransformer(messageProcessor); } else { - transformer = new MethodInvokingTransformer(targetObject); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker( + targetObject, org.springframework.integration.annotation.Transformer.class); + transformer = new MethodInvokingTransformer(messageProcessor); } return new MessageTransformingHandler(transformer); } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/annotation/TransformerAnnotationPostProcessor.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/annotation/TransformerAnnotationPostProcessor.java index e1fc43aee6..9bf61b1e53 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/annotation/TransformerAnnotationPostProcessor.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/annotation/TransformerAnnotationPostProcessor.java @@ -20,6 +20,8 @@ import java.lang.reflect.Method; import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.integration.annotation.Transformer; +import org.springframework.integration.handler.MessageMappingMethodInvoker; +import org.springframework.integration.handler.MessageProcessor; import org.springframework.integration.message.MessageHandler; import org.springframework.integration.transformer.MethodInvokingTransformer; import org.springframework.integration.transformer.MessageTransformingHandler; @@ -39,7 +41,8 @@ public class TransformerAnnotationPostProcessor extends AbstractMethodAnnotation @Override protected MessageHandler createHandler(Object bean, Method method, Transformer annotation) { - MethodInvokingTransformer transformer = new MethodInvokingTransformer(bean, method); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(bean, method); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); MessageTransformingHandler handler = new MessageTransformingHandler(transformer); String outputChannelName = annotation.outputChannel(); if (StringUtils.hasText(outputChannelName)) { 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 bdae2f8ad6..504453e07a 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 @@ -16,12 +16,10 @@ package org.springframework.integration.transformer; -import java.lang.reflect.Method; import java.util.Map; import java.util.Properties; import org.springframework.integration.core.Message; -import org.springframework.integration.handler.MessageMappingMethodInvoker; import org.springframework.integration.handler.MessageProcessor; import org.springframework.integration.message.MessageBuilder; import org.springframework.integration.message.MessageHandlingException; @@ -40,19 +38,6 @@ public class MethodInvokingTransformer implements Transformer { this.messageProcessor = messageProcessor; } - public MethodInvokingTransformer(Object object, Method method) { - this.messageProcessor = new MessageMappingMethodInvoker(object, method); - } - - public MethodInvokingTransformer(Object object, String methodName) { - this.messageProcessor = new MessageMappingMethodInvoker(object, methodName); - } - - public MethodInvokingTransformer(Object object) { - this.messageProcessor = new MessageMappingMethodInvoker(object, - org.springframework.integration.annotation.Transformer.class); - } - public Message transform(Message message) { Object result = this.messageProcessor.processMessage(message); 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 fc6e19c855..f686cfd9cf 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 @@ -28,6 +28,8 @@ import org.junit.Test; import org.springframework.integration.annotation.Header; import org.springframework.integration.annotation.Transformer; import org.springframework.integration.core.Message; +import org.springframework.integration.handler.MessageMappingMethodInvoker; +import org.springframework.integration.handler.MessageProcessor; import org.springframework.integration.message.GenericMessage; import org.springframework.integration.message.MessageBuilder; import org.springframework.integration.message.MessageHandlingException; @@ -42,7 +44,8 @@ public class MethodInvokingTransformerTests { public void simplePayloadConfiguredWithMethodReference() throws Exception { TestBean testBean = new TestBean(); Method testMethod = testBean.getClass().getMethod("exclaim", String.class); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, testMethod); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = new StringMessage("foo"); Message result = transformer.transform(message); assertEquals("FOO!", result.getPayload()); @@ -51,7 +54,8 @@ public class MethodInvokingTransformerTests { @Test public void simplePayloadConfiguredWithMethodName() throws Exception { TestBean testBean = new TestBean(); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "exclaim"); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, "exclaim"); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = new StringMessage("foo"); Message result = transformer.transform(message); assertEquals("FOO!", result.getPayload()); @@ -61,7 +65,8 @@ public class MethodInvokingTransformerTests { public void typeConversionConfiguredWithMethodReference() throws Exception { TestBean testBean = new TestBean(); Method testMethod = testBean.getClass().getMethod("exclaim", String.class); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, testMethod); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = new GenericMessage(123); Message result = transformer.transform(message); assertEquals("123!", result.getPayload()); @@ -70,7 +75,8 @@ public class MethodInvokingTransformerTests { @Test public void typeConversionConfiguredWithMethodName() throws Exception { TestBean testBean = new TestBean(); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "exclaim"); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, "exclaim"); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = new GenericMessage(123); Message result = transformer.transform(message); assertEquals("123!", result.getPayload()); @@ -80,7 +86,8 @@ public class MethodInvokingTransformerTests { public void typeConversionFailureConfiguredWithMethodReference() throws Exception { TestBean testBean = new TestBean(); Method testMethod = testBean.getClass().getMethod("exclaim", String.class); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, testMethod); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = new GenericMessage(new Date()); transformer.transform(message); } @@ -88,7 +95,8 @@ public class MethodInvokingTransformerTests { @Test(expected = IllegalArgumentException.class) public void typeConversionFailureConfiguredWithMethodName() throws Exception { TestBean testBean = new TestBean(); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "exclaim"); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, "exclaim"); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = new GenericMessage(new Date()); transformer.transform(message); } @@ -97,7 +105,8 @@ public class MethodInvokingTransformerTests { public void headerAnnotationConfiguredWithMethodReference() throws Exception { TestBean testBean = new TestBean(); Method testMethod = testBean.getClass().getMethod("headerTest", String.class, Integer.class); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, testMethod); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = MessageBuilder.withPayload("foo") .setHeader("number", 123).build(); Message result = transformer.transform(message); @@ -107,7 +116,8 @@ public class MethodInvokingTransformerTests { @Test public void headerAnnotationConfiguredWithMethodName() throws Exception { TestBean testBean = new TestBean(); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "headerTest"); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, "headerTest"); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = MessageBuilder.withPayload("foo") .setHeader("number", 123).build(); Message result = transformer.transform(message); @@ -118,7 +128,8 @@ public class MethodInvokingTransformerTests { public void headerValueNotProvided() throws Exception { TestBean testBean = new TestBean(); Method testMethod = testBean.getClass().getMethod("headerTest", String.class, Integer.class); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, testMethod); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = MessageBuilder.withPayload("foo") .setHeader("wrong", 123).build(); transformer.transform(message); @@ -128,7 +139,8 @@ public class MethodInvokingTransformerTests { public void optionalHeaderAnnotation() throws Exception { TestBean testBean = new TestBean(); Method testMethod = testBean.getClass().getMethod("optionalHeaderTest", String.class, Integer.class); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, testMethod); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = MessageBuilder.withPayload("foo").setHeader("number", 99).build(); Message result = transformer.transform(message); assertEquals("foo99", result.getPayload()); @@ -138,7 +150,8 @@ public class MethodInvokingTransformerTests { public void optionalHeaderValueNotProvided() throws Exception { TestBean testBean = new TestBean(); Method testMethod = testBean.getClass().getMethod("optionalHeaderTest", String.class, Integer.class); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, testMethod); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = MessageBuilder.withPayload("foo").build(); Message result = transformer.transform(message); assertEquals("foonull", result.getPayload()); @@ -148,7 +161,8 @@ public class MethodInvokingTransformerTests { public void headerEnricherConfiguredWithMethodReference() throws Exception { TestBean testBean = new TestBean(); Method testMethod = testBean.getClass().getMethod("propertyEnricherTest", String.class); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, testMethod); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = MessageBuilder.withPayload("test") .setHeader("prop1", "bad") .setHeader("prop3", "baz").build(); @@ -162,7 +176,8 @@ public class MethodInvokingTransformerTests { @Test public void headerEnricherConfiguredWithMethodName() throws Exception { TestBean testBean = new TestBean(); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "propertyEnricherTest"); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, "propertyEnricherTest"); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = MessageBuilder.withPayload("test") .setHeader("prop1", "bad") .setHeader("prop3", "baz").build(); @@ -177,7 +192,8 @@ public class MethodInvokingTransformerTests { public void messageReturnValueConfiguredWithMethodReference() throws Exception { TestBean testBean = new TestBean(); Method testMethod = testBean.getClass().getMethod("messageReturnValueTest", Message.class); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, testMethod); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = MessageBuilder.withPayload("test").build(); Message result = transformer.transform(message); assertEquals("test", result.getPayload()); @@ -186,7 +202,8 @@ public class MethodInvokingTransformerTests { @Test public void messageReturnValueConfiguredWithMethodName() throws Exception { TestBean testBean = new TestBean(); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "messageReturnValueTest"); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, "messageReturnValueTest"); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Message message = MessageBuilder.withPayload("test").build(); Message result = transformer.transform(message); assertEquals("test", result.getPayload()); @@ -197,7 +214,8 @@ public class MethodInvokingTransformerTests { public void propertiesPayloadConfiguredWithMethodReference() throws Exception { TestBean testBean = new TestBean(); Method testMethod = testBean.getClass().getMethod("propertyPayloadTest", Properties.class); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, testMethod); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Properties props = new Properties(); props.setProperty("prop1", "bad"); props.setProperty("prop3", "baz"); @@ -217,7 +235,8 @@ public class MethodInvokingTransformerTests { @SuppressWarnings("unchecked") public void propertiesPayloadConfiguredWithMethodName() throws Exception { TestBean testBean = new TestBean(); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "propertyPayloadTest"); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, "propertyPayloadTest"); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); Properties props = new Properties(); props.setProperty("prop1", "bad"); props.setProperty("prop3", "baz"); @@ -236,13 +255,15 @@ public class MethodInvokingTransformerTests { @Test public void nullReturningMethod() { TestBean testBean = new TestBean(); - MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "nullReturnValueTest"); + MessageProcessor messageProcessor = new MessageMappingMethodInvoker(testBean, "nullReturnValueTest"); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(messageProcessor); StringMessage message = new StringMessage("test"); Message result = transformer.transform(message); assertNull(result); } + @SuppressWarnings("unused") private static class TestBean { @Transformer