diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/TransformerMessageHandler.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/TransformerMessageHandler.java deleted file mode 100644 index b51ba05115..0000000000 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/TransformerMessageHandler.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2002-2008 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.integration.transformer; - -import java.util.Map; -import java.util.Properties; - -import org.springframework.integration.handler.AbstractMessageHandler; -import org.springframework.integration.message.Message; -import org.springframework.integration.message.MessageBuilder; -import org.springframework.integration.message.MessageHandlingException; - -/** - * @author Mark Fisher - */ -public class TransformerMessageHandler extends AbstractMessageHandler { - - @Override - protected Message createReplyMessage(Object result, Message requestMessage) { - if (result instanceof Properties && !(requestMessage.getPayload() instanceof Properties)) { - Properties propertiesToSet = (Properties) result; - MessageBuilder builder = MessageBuilder.fromMessage(requestMessage); - for (Object keyObject : propertiesToSet.keySet()) { - String key = (String) keyObject; - builder.setHeader(key, propertiesToSet.getProperty(key)); - } - return builder.build(); - } - else if (result instanceof Map && !(requestMessage.getPayload() instanceof Map)) { - Map attributesToSet = (Map ) result; - MessageBuilder builder = MessageBuilder.fromMessage(requestMessage); - for (Object key : attributesToSet.keySet()) { - if (!(key instanceof String)) { - throw new MessageHandlingException(requestMessage, - "Map returned from a Transformer method must have String-typed keys"); - } - builder.setHeader((String) key, attributesToSet.get(key)); - } - return builder.build(); - } - else { - return MessageBuilder.fromPayload(result).copyHeaders(requestMessage.getHeaders()).build(); - } - } - - @Override - protected Message postProcessReplyMessage(Message replyMessage, Message requestMessage) { - return replyMessage; - } - -} diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/config/TransformerMessageHandlerCreator.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/config/TransformerMessageHandlerCreator.java deleted file mode 100644 index b9172fdec6..0000000000 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/config/TransformerMessageHandlerCreator.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2002-2008 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.integration.transformer.config; - -import java.lang.reflect.Method; -import java.util.Map; - -import org.springframework.integration.handler.MessageHandler; -import org.springframework.integration.handler.config.AbstractMessageHandlerCreator; -import org.springframework.integration.transformer.TransformerMessageHandler; - -/** - * @author Mark Fisher - */ -public class TransformerMessageHandlerCreator extends AbstractMessageHandlerCreator { - - public MessageHandler doCreateHandler(Object object, Method method, Map attributes) { - TransformerMessageHandler handler = new TransformerMessageHandler(); - handler.setObject(object); - handler.setMethodName(method.getName()); - handler.afterPropertiesSet(); - return handler; - } - -} 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 f8ab49c669..c5be535c05 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 @@ -17,13 +17,21 @@ package org.springframework.integration.transformer; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; +import java.lang.reflect.Method; import java.util.Date; +import java.util.Properties; import org.junit.Test; +import org.springframework.integration.annotation.Header; +import org.springframework.integration.annotation.Transformer; import org.springframework.integration.message.GenericMessage; +import org.springframework.integration.message.Message; +import org.springframework.integration.message.MessageBuilder; import org.springframework.integration.message.MessageHandlingException; +import org.springframework.integration.message.MessagingException; import org.springframework.integration.message.StringMessage; /** @@ -32,28 +40,212 @@ import org.springframework.integration.message.StringMessage; public class MethodInvokingTransformerTests { @Test - public void testSimpleMethod() throws Exception { - MethodInvokingTransformer transformer = new MethodInvokingTransformer(new TestBean(), "exclaim"); - assertEquals("FOO!", transformer.transform(new StringMessage("foo")).getPayload()); + public void simplePayloadConfiguredWithMethodReference() throws Exception { + TestBean testBean = new TestBean(); + Method testMethod = testBean.getClass().getMethod("exclaim", String.class); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + Message message = new StringMessage("foo"); + Message result = transformer.transform(message); + assertEquals("FOO!", result.getPayload()); } @Test - public void testTypeConversion() throws Exception { - MethodInvokingTransformer transformer = new MethodInvokingTransformer(new TestBean(), "exclaim"); - assertEquals("123!", transformer.transform(new GenericMessage(123)).getPayload()); + public void simplePayloadConfiguredWithMethodName() throws Exception { + TestBean testBean = new TestBean(); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "exclaim"); + Message message = new StringMessage("foo"); + Message result = transformer.transform(message); + assertEquals("FOO!", result.getPayload()); + } + + @Test + public void typeConversionConfiguredWithMethodReference() throws Exception { + TestBean testBean = new TestBean(); + Method testMethod = testBean.getClass().getMethod("exclaim", String.class); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + Message message = new GenericMessage(123); + Message result = transformer.transform(message); + assertEquals("123!", result.getPayload()); + } + + @Test + public void typeConversionConfiguredWithMethodName() throws Exception { + TestBean testBean = new TestBean(); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "exclaim"); + Message message = new GenericMessage(123); + Message result = transformer.transform(message); + assertEquals("123!", result.getPayload()); + } + + @Test(expected = MessagingException.class) + public void typeConversionFailureConfiguredWithMethodReference() throws Exception { + TestBean testBean = new TestBean(); + Method testMethod = testBean.getClass().getMethod("exclaim", String.class); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + Message message = new GenericMessage(new Date()); + transformer.transform(message); + } + + @Test(expected = MessagingException.class) + public void typeConversionFailureConfiguredWithMethodName() throws Exception { + TestBean testBean = new TestBean(); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "exclaim"); + Message message = new GenericMessage(new Date()); + transformer.transform(message); + } + + @Test + 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); + Message message = MessageBuilder.fromPayload("foo") + .setHeader("number", 123).build(); + Message result = transformer.transform(message); + assertEquals("foo123", result.getPayload()); + } + + @Test + public void headerAnnotationConfiguredWithMethodName() throws Exception { + TestBean testBean = new TestBean(); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "headerTest"); + Message message = MessageBuilder.fromPayload("foo") + .setHeader("number", 123).build(); + Message result = transformer.transform(message); + assertEquals("foo123", result.getPayload()); } @Test(expected = MessageHandlingException.class) - public void testTypeConversionFailure() throws Exception { - MethodInvokingTransformer transformer = new MethodInvokingTransformer(new TestBean(), "exclaim"); - transformer.transform(new GenericMessage(new Date())); + 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); + Message message = MessageBuilder.fromPayload("foo") + .setHeader("wrong", 123).build(); + transformer.transform(message); + } + + @Test + 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); + Message message = MessageBuilder.fromPayload("foo").setHeader("number", 99).build(); + Message result = transformer.transform(message); + assertEquals("foo99", result.getPayload()); + } + + @Test + 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); + Message message = MessageBuilder.fromPayload("foo").build(); + Message result = transformer.transform(message); + assertEquals("foonull", result.getPayload()); + } + + @Test + public void headerEnricherConfiguredWithMethodReference() throws Exception { + TestBean testBean = new TestBean(); + Method testMethod = testBean.getClass().getMethod("propertyEnricherTest", String.class); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + Message message = MessageBuilder.fromPayload("test") + .setHeader("prop1", "bad") + .setHeader("prop3", "baz").build(); + Message result = transformer.transform(message); + assertEquals("test", result.getPayload()); + assertEquals("foo", result.getHeaders().get("prop1")); + assertEquals("bar", result.getHeaders().get("prop2")); + assertEquals("baz", result.getHeaders().get("prop3")); + } + + @Test + public void headerEnricherConfiguredWithMethodName() throws Exception { + TestBean testBean = new TestBean(); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "propertyEnricherTest"); + Message message = MessageBuilder.fromPayload("test") + .setHeader("prop1", "bad") + .setHeader("prop3", "baz").build(); + Message result = transformer.transform(message); + assertEquals("test", result.getPayload()); + assertEquals("foo", result.getHeaders().get("prop1")); + assertEquals("bar", result.getHeaders().get("prop2")); + assertEquals("baz", result.getHeaders().get("prop3")); + } + + @Test + @SuppressWarnings("unchecked") + public void propertiesPayloadConfiguredWithMethodReference() throws Exception { + TestBean testBean = new TestBean(); + Method testMethod = testBean.getClass().getMethod("propertyPayloadTest", Properties.class); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, testMethod); + Properties props = new Properties(); + props.setProperty("prop1", "bad"); + props.setProperty("prop3", "baz"); + Message message = new GenericMessage(props); + Message result = (Message) transformer.transform(message); + assertEquals(Properties.class, result.getPayload().getClass()); + Properties payload = result.getPayload(); + assertEquals("foo", payload.getProperty("prop1")); + assertEquals("bar", payload.getProperty("prop2")); + assertEquals("baz", payload.getProperty("prop3")); + assertNull(result.getHeaders().get("prop1")); + assertNull(result.getHeaders().get("prop2")); + assertNull(result.getHeaders().get("prop3")); + } + + @Test + @SuppressWarnings("unchecked") + public void propertiesPayloadConfiguredWithMethodName() throws Exception { + TestBean testBean = new TestBean(); + MethodInvokingTransformer transformer = new MethodInvokingTransformer(testBean, "propertyPayloadTest"); + Properties props = new Properties(); + props.setProperty("prop1", "bad"); + props.setProperty("prop3", "baz"); + Message message = new GenericMessage(props); + Message result = (Message) transformer.transform(message); + assertEquals(Properties.class, result.getPayload().getClass()); + Properties payload = result.getPayload(); + assertEquals("foo", payload.getProperty("prop1")); + assertEquals("bar", payload.getProperty("prop2")); + assertEquals("baz", payload.getProperty("prop3")); + assertNull(result.getHeaders().get("prop1")); + assertNull(result.getHeaders().get("prop2")); + assertNull(result.getHeaders().get("prop3")); } private static class TestBean { - String exclaim(String input) { - return input.toUpperCase() + "!"; + @Transformer + public String exclaim(String s) { + return s.toUpperCase() + "!"; + } + + @Transformer + public String headerTest(String s, @Header("number") Integer num) { + return s + num; + } + + @Transformer + public String optionalHeaderTest(String s, @Header(value="number", required=false) Integer num) { + return s + num; + } + + @Transformer + public Properties propertyEnricherTest(String s) { + Properties properties = new Properties(); + properties.setProperty("prop1", "foo"); + properties.setProperty("prop2", "bar"); + return properties; + } + + @Transformer + public Properties propertyPayloadTest(Properties properties) { + properties.setProperty("prop1", "foo"); + properties.setProperty("prop2", "bar"); + return properties; } } diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/transformer/TransformerMessageHandlerTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/transformer/TransformerMessageHandlerTests.java deleted file mode 100644 index d651f21e6a..0000000000 --- a/org.springframework.integration/src/test/java/org/springframework/integration/transformer/TransformerMessageHandlerTests.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright 2002-2008 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.integration.transformer; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -import java.util.Date; -import java.util.Properties; - -import org.junit.Test; - -import org.springframework.integration.annotation.Header; -import org.springframework.integration.annotation.Transformer; -import org.springframework.integration.message.GenericMessage; -import org.springframework.integration.message.Message; -import org.springframework.integration.message.MessageBuilder; -import org.springframework.integration.message.MessageHandlingException; -import org.springframework.integration.message.MessagingException; -import org.springframework.integration.message.StringMessage; - -/** - * @author Mark Fisher - */ -public class TransformerMessageHandlerTests { - - @Test - public void simplePayload() throws Exception { - TestBean testBean = new TestBean(); - TransformerMessageHandler handler = new TransformerMessageHandler(); - handler.setObject(testBean); - handler.setMethod(testBean.getClass().getMethod("exclaim", String.class)); - Message message = new StringMessage("foo"); - Message result = handler.handle(message); - assertEquals("FOO!", result.getPayload()); - } - - @Test - public void typeConversion() throws Exception { - TestBean testBean = new TestBean(); - TransformerMessageHandler handler = new TransformerMessageHandler(); - handler.setObject(testBean); - handler.setMethod(testBean.getClass().getMethod("exclaim", String.class)); - Message message = new GenericMessage(123); - Message result = handler.handle(message); - assertEquals("123!", result.getPayload()); - } - - @Test(expected = MessagingException.class) - public void typeConversionFailure() throws Exception { - TestBean testBean = new TestBean(); - TransformerMessageHandler handler = new TransformerMessageHandler(); - handler.setObject(testBean); - handler.setMethod(testBean.getClass().getMethod("exclaim", String.class)); - Message message = new GenericMessage(new Date()); - handler.handle(message); - } - - @Test - public void headerAnnotation() throws Exception { - TestBean testBean = new TestBean(); - TransformerMessageHandler handler = new TransformerMessageHandler(); - handler.setObject(testBean); - handler.setMethod(testBean.getClass().getMethod("headerTest", String.class, Integer.class)); - Message message = MessageBuilder.fromPayload("foo") - .setHeader("number", 123).build(); - Message result = handler.handle(message); - assertEquals("foo123", result.getPayload()); - } - - @Test(expected = MessageHandlingException.class) - public void headerValueNotProvided() throws Exception { - TestBean testBean = new TestBean(); - TransformerMessageHandler handler = new TransformerMessageHandler(); - handler.setObject(testBean); - handler.setMethod(testBean.getClass().getMethod("headerTest", String.class, Integer.class)); - Message message = MessageBuilder.fromPayload("foo") - .setHeader("wrong", 123).build(); - handler.handle(message); - } - - @Test - public void optionalHeaderAnnotation() throws Exception { - TestBean testBean = new TestBean(); - TransformerMessageHandler handler = new TransformerMessageHandler(); - handler.setObject(testBean); - handler.setMethod(testBean.getClass().getMethod("optionalHeaderTest", String.class, Integer.class)); - Message message = MessageBuilder.fromPayload("foo").setHeader("number", 99).build(); - Message result = handler.handle(message); - assertEquals("foo99", result.getPayload()); - } - - @Test - public void optionalHeaderValueNotProvided() throws Exception { - TestBean testBean = new TestBean(); - TransformerMessageHandler handler = new TransformerMessageHandler(); - handler.setObject(testBean); - handler.setMethod(testBean.getClass().getMethod("optionalHeaderTest", String.class, Integer.class)); - Message message = MessageBuilder.fromPayload("foo").build(); - Message result = handler.handle(message); - assertEquals("foonull", result.getPayload()); - } - - @Test - public void headerEnricher() throws Exception { - TestBean testBean = new TestBean(); - TransformerMessageHandler handler = new TransformerMessageHandler(); - handler.setObject(testBean); - handler.setMethod(testBean.getClass().getMethod("propertyEnricherTest", String.class)); - Message message = MessageBuilder.fromPayload("test") - .setHeader("prop1", "bad") - .setHeader("prop3", "baz").build(); - Message result = handler.handle(message); - assertEquals("test", result.getPayload()); - assertEquals("foo", result.getHeaders().get("prop1")); - assertEquals("bar", result.getHeaders().get("prop2")); - assertEquals("baz", result.getHeaders().get("prop3")); - } - - @Test - @SuppressWarnings("unchecked") - public void propertiesPayload() throws Exception { - TestBean testBean = new TestBean(); - TransformerMessageHandler handler = new TransformerMessageHandler(); - handler.setObject(testBean); - handler.setMethod(testBean.getClass().getMethod("propertyPayloadTest", Properties.class)); - Properties props = new Properties(); - props.setProperty("prop1", "bad"); - props.setProperty("prop3", "baz"); - Message message = new GenericMessage(props); - Message result = (Message) handler.handle(message); - assertEquals(Properties.class, result.getPayload().getClass()); - Properties payload = result.getPayload(); - assertEquals("foo", payload.getProperty("prop1")); - assertEquals("bar", payload.getProperty("prop2")); - assertEquals("baz", payload.getProperty("prop3")); - assertNull(result.getHeaders().get("prop1")); - assertNull(result.getHeaders().get("prop2")); - assertNull(result.getHeaders().get("prop3")); - } - - - private static class TestBean { - - @Transformer - public String exclaim(String s) { - return s.toUpperCase() + "!"; - } - - @Transformer - public String headerTest(String s, @Header("number") Integer num) { - return s + num; - } - - @Transformer - public String optionalHeaderTest(String s, @Header(value="number", required=false) Integer num) { - return s + num; - } - - @Transformer - public Properties propertyEnricherTest(String s) { - Properties properties = new Properties(); - properties.setProperty("prop1", "foo"); - properties.setProperty("prop2", "bar"); - return properties; - } - - @Transformer - public Properties propertyPayloadTest(Properties properties) { - properties.setProperty("prop1", "foo"); - properties.setProperty("prop2", "bar"); - return properties; - } - } - -}