Refactored MessageMappingParameterResolver to MethodParameterMessageMapper, an implementation of the MessageMapper interface.

This commit is contained in:
Mark Fisher
2008-09-27 15:18:28 +00:00
parent acd1527470
commit 9773908155
3 changed files with 46 additions and 39 deletions

View File

@@ -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<Object[]> 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() };
}

View File

@@ -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<Object[]> {
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;
}