diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/message/MessageMappingMethodInvoker.java b/org.springframework.integration/src/main/java/org/springframework/integration/message/MessageMappingMethodInvoker.java index ff560b54f6..59efbeaf07 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/message/MessageMappingMethodInvoker.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/message/MessageMappingMethodInvoker.java @@ -26,6 +26,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.integration.ConfigurationException; +import org.springframework.integration.gateway.MessageMapper; import org.springframework.integration.util.DefaultMethodInvoker; import org.springframework.integration.util.MethodInvoker; import org.springframework.integration.util.NameResolvingMethodInvoker; @@ -55,7 +56,7 @@ public class MessageMappingMethodInvoker implements MethodInvoker, InitializingB private volatile String methodName; - private volatile MessageMappingParameterResolver parameterResolver; + private volatile MessageMapper messageMapper; private volatile MethodInvoker invoker; @@ -109,7 +110,7 @@ public class MessageMappingMethodInvoker implements MethodInvoker, InitializingB this.methodExpectsMessage = true; } this.invoker = new DefaultMethodInvoker(this.object, this.method); - this.parameterResolver = new MessageMappingParameterResolver(this.method); + this.messageMapper = new MethodParameterMessageMapper(this.method); } else { // TODO: resolve the candidate method and/or create a dynamic resolver @@ -190,8 +191,8 @@ public class MessageMappingMethodInvoker implements MethodInvoker, InitializingB } private Object[] resolveParameters(Message message) { - if (this.parameterResolver != null) { - return this.parameterResolver.resolveParameters(message); + if (this.messageMapper != null) { + return this.messageMapper.fromMessage(message); } return new Object[] { message.getPayload() }; } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/message/MessageMappingParameterResolver.java b/org.springframework.integration/src/main/java/org/springframework/integration/message/MethodParameterMessageMapper.java similarity index 93% rename from org.springframework.integration/src/main/java/org/springframework/integration/message/MessageMappingParameterResolver.java rename to org.springframework.integration/src/main/java/org/springframework/integration/message/MethodParameterMessageMapper.java index 8f991da66d..a5ce2bfb0a 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/message/MessageMappingParameterResolver.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/message/MethodParameterMessageMapper.java @@ -25,6 +25,7 @@ import org.springframework.core.LocalVariableTableParameterNameDiscoverer; import org.springframework.core.MethodParameter; import org.springframework.core.ParameterNameDiscoverer; import org.springframework.integration.annotation.Header; +import org.springframework.integration.gateway.MessageMapper; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; @@ -45,7 +46,7 @@ import org.springframework.util.StringUtils; * * @author Mark Fisher */ -public class MessageMappingParameterResolver { +public class MethodParameterMessageMapper implements MessageMapper { private final Method method; @@ -54,14 +55,19 @@ public class MessageMappingParameterResolver { private final ParameterNameDiscoverer parameterNameDiscoverer = new LocalVariableTableParameterNameDiscoverer(); - public MessageMappingParameterResolver(Method method) { + public MethodParameterMessageMapper(Method method) { Assert.notNull(method, "method must not be null"); this.method = method; this.initializeParameterMetadata(); } - public Object[] resolveParameters(Message message) { + public Message toMessage(Object[] methodParameters) { + // TODO: add checks for @Header, Map, etc. + return MessageBuilder.withPayload(methodParameters).build(); + } + + public Object[] fromMessage(Message message) { if (message == null) { return null; } diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/message/MessageMappingParameterResolverTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/message/MethodParameterMessageMapperTests.java similarity index 71% rename from org.springframework.integration/src/test/java/org/springframework/integration/message/MessageMappingParameterResolverTests.java rename to org.springframework.integration/src/test/java/org/springframework/integration/message/MethodParameterMessageMapperTests.java index 4916962504..9234988aac 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/message/MessageMappingParameterResolverTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/message/MethodParameterMessageMapperTests.java @@ -30,83 +30,83 @@ import org.springframework.integration.annotation.Header; import org.springframework.integration.message.Message; import org.springframework.integration.message.MessageBuilder; import org.springframework.integration.message.MessageHandlingException; -import org.springframework.integration.message.MessageMappingParameterResolver; +import org.springframework.integration.message.MethodParameterMessageMapper; import org.springframework.integration.message.StringMessage; /** * @author Mark Fisher */ -public class MessageMappingParameterResolverTests { +public class MethodParameterMessageMapperTests { @Test - public void optionalHeader() throws Exception { + public void fromMessageWithOptionalHeader() throws Exception { Method method = TestService.class.getMethod("optionalHeader", Integer.class); - MessageMappingParameterResolver resolver = new MessageMappingParameterResolver(method); - Object[] args = resolver.resolveParameters(new StringMessage("foo")); + MethodParameterMessageMapper mapper = new MethodParameterMessageMapper(method); + Object[] args = mapper.fromMessage(new StringMessage("foo")); assertEquals(1, args.length); assertNull(args[0]); } @Test(expected = MessageHandlingException.class) - public void tequiredHeaderNotProvided() throws Exception { + public void fromMessageWithRequiredHeaderNotProvided() throws Exception { Method method = TestService.class.getMethod("requiredHeader", Integer.class); - MessageMappingParameterResolver resolver = new MessageMappingParameterResolver(method); - resolver.resolveParameters(new StringMessage("foo")); + MethodParameterMessageMapper mapper = new MethodParameterMessageMapper(method); + mapper.fromMessage(new StringMessage("foo")); } @Test - public void requiredHeaderProvided() throws Exception { + public void fromMessageWithRequiredHeaderProvided() throws Exception { Method method = TestService.class.getMethod("requiredHeader", Integer.class); - MessageMappingParameterResolver resolver = new MessageMappingParameterResolver(method); + MethodParameterMessageMapper mapper = new MethodParameterMessageMapper(method); Message message = MessageBuilder.withPayload("foo") .setHeader("num", new Integer(123)).build(); - Object[] args = resolver.resolveParameters(message); + Object[] args = mapper.fromMessage(message); assertEquals(1, args.length); assertEquals(new Integer(123), args[0]); } @Test(expected = MessageHandlingException.class) - public void optionalAndRequiredHeaderWithOnlyOptionalHeaderProvided() throws Exception { + public void fromMessageWithOptionalAndRequiredHeaderAndOnlyOptionalHeaderProvided() throws Exception { Method method = TestService.class.getMethod("optionalAndRequiredHeader", String.class, Integer.class); - MessageMappingParameterResolver resolver = new MessageMappingParameterResolver(method); + MethodParameterMessageMapper mapper = new MethodParameterMessageMapper(method); Message message = MessageBuilder.withPayload("foo") .setHeader("prop", "bar").build(); - resolver.resolveParameters(message); + mapper.fromMessage(message); } @Test - public void optionalAndRequiredHeaderWithOnlyRequiredHeaderProvided() throws Exception { + public void fromMessageWithOptionalAndRequiredHeaderAndOnlyRequiredHeaderProvided() throws Exception { Method method = TestService.class.getMethod("optionalAndRequiredHeader", String.class, Integer.class); - MessageMappingParameterResolver resolver = new MessageMappingParameterResolver(method); + MethodParameterMessageMapper mapper = new MethodParameterMessageMapper(method); Message message = MessageBuilder.withPayload("foo") .setHeader("num", new Integer(123)).build(); - Object[] args = resolver.resolveParameters(message); + Object[] args = mapper.fromMessage(message); assertEquals(2, args.length); assertNull(args[0]); assertEquals(123, args[1]); } @Test - public void optionalAndRequiredHeaderWithBothHeadersProvided() throws Exception { + public void fromMessageWithOptionalAndRequiredHeaderAndBothHeadersProvided() throws Exception { Method method = TestService.class.getMethod("optionalAndRequiredHeader", String.class, Integer.class); - MessageMappingParameterResolver resolver = new MessageMappingParameterResolver(method); + MethodParameterMessageMapper mapper = new MethodParameterMessageMapper(method); Message message = MessageBuilder.withPayload("foo") .setHeader("num", new Integer(123)) .setHeader("prop", "bar") .build(); - Object[] args = resolver.resolveParameters(message); + Object[] args = mapper.fromMessage(message); assertEquals(2, args.length); assertEquals("bar", args[0]); assertEquals(123, args[1]); } @Test - public void propertiesMethodWithNonPropertiesPayload() throws Exception { + public void fromMessageWithPropertiesMethodAndNonPropertiesPayload() throws Exception { Method method = TestService.class.getMethod("propertiesMethod", Properties.class); - MessageMappingParameterResolver resolver = new MessageMappingParameterResolver(method); + MethodParameterMessageMapper mapper = new MethodParameterMessageMapper(method); Message message = MessageBuilder.withPayload("test") .setHeader("prop1", "foo").setHeader("prop2", "bar").build(); - Object[] args = resolver.resolveParameters(message); + Object[] args = mapper.fromMessage(message); Properties result = (Properties) args[0]; assertEquals(2, result.size()); assertEquals("foo", result.getProperty("prop1")); @@ -114,15 +114,15 @@ public class MessageMappingParameterResolverTests { } @Test - public void propertiesMethodWithPropertiesPayload() throws Exception { + public void fromMessageWithPropertiesMethodAndPropertiesPayload() throws Exception { Method method = TestService.class.getMethod("propertiesMethod", Properties.class); - MessageMappingParameterResolver resolver = new MessageMappingParameterResolver(method); + MethodParameterMessageMapper mapper = new MethodParameterMessageMapper(method); Properties payload = new Properties(); payload.setProperty("prop1", "foo"); payload.setProperty("prop2", "bar"); Message message = MessageBuilder.withPayload(payload) .setHeader("prop1", "not").setHeader("prop2", "these").build(); - Object[] args = resolver.resolveParameters(message); + Object[] args = mapper.fromMessage(message); Properties result = (Properties) args[0]; assertEquals(2, result.size()); assertEquals("foo", result.getProperty("prop1")); @@ -131,13 +131,13 @@ public class MessageMappingParameterResolverTests { @Test @SuppressWarnings("unchecked") - public void testMapMethodWithNonMapPayload() throws Exception { + public void fromMessageWithMapMethodAndNonMapPayload() throws Exception { Method method = TestService.class.getMethod("mapMethod", Map.class); - MessageMappingParameterResolver resolver = new MessageMappingParameterResolver(method); + MethodParameterMessageMapper mapper = new MethodParameterMessageMapper(method); Message message = MessageBuilder.withPayload("test") .setHeader("attrib1", new Integer(123)) .setHeader("attrib2", new Integer(456)).build(); - Object[] args = resolver.resolveParameters(message); + Object[] args = mapper.fromMessage(message); Map result = (Map) args[0]; assertEquals(new Integer(123), result.get("attrib1")); assertEquals(new Integer(456), result.get("attrib2")); @@ -145,16 +145,16 @@ public class MessageMappingParameterResolverTests { @Test @SuppressWarnings("unchecked") - public void testMapMethodWithMapPayload() throws Exception { + public void fromMessageWithMapMethodAndMapPayload() throws Exception { Method method = TestService.class.getMethod("mapMethod", Map.class); - MessageMappingParameterResolver resolver = new MessageMappingParameterResolver(method); + MethodParameterMessageMapper mapper = new MethodParameterMessageMapper(method); Map payload = new HashMap(); payload.put("attrib1", new Integer(123)); payload.put("attrib2", new Integer(456)); Message> message = MessageBuilder.withPayload(payload) .setHeader("attrib1", new Integer(123)) .setHeader("attrib2", new Integer(456)).build(); - Object[] args = resolver.resolveParameters(message); + Object[] args = mapper.fromMessage(message); Map result = (Map) args[0]; assertEquals(2, result.size()); assertEquals(new Integer(123), result.get("attrib1"));