Started implementation of the 'toMessage()' functionality on MethodParameterMessageMapper (to be used by GatewayProxyFactoryBean after refactoring). Resolves parameters annotated with @Header and payload Objects.

This commit is contained in:
Mark Fisher
2008-09-27 16:09:23 +00:00
parent 1cfe32cd21
commit fd77d1a1d7

View File

@@ -17,6 +17,7 @@
package org.springframework.integration.message;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@@ -61,9 +62,35 @@ public class MethodParameterMessageMapper implements MessageMapper<Object[]> {
}
public Message<?> toMessage(Object[] methodParameters) {
// TODO: add checks for @Header, Map, etc.
return MessageBuilder.withPayload(methodParameters).build();
public Message<?> toMessage(Object[] parameters) {
Assert.isTrue(!ObjectUtils.isEmpty(parameters), "parameters array is required");
if (ObjectUtils.isEmpty(this.parameterMetadata)) {
return MessageBuilder.withPayload(parameters).build();
}
Assert.isTrue(parameters.length == this.parameterMetadata.length,
"wrong number of parameters: expected " + this.parameterMetadata.length
+ ", received " + parameters.length);
Object payload = null;
Map<String, Object> headers = new HashMap<String, Object>();
for (int i = 0; i < parameters.length; i++) {
Object value = parameters[i];
MethodParameterMetadata metadata = this.parameterMetadata[i];
Class<?> expectedType = metadata.type;
if (expectedType.equals(Header.class)) {
if (metadata.required) {
Assert.notNull(value, "header '" + metadata.key + "' is required");
}
headers.put(metadata.key, value);
}
// TODO: add checks for Map and Properties to be used as headers
else {
Assert.isNull(payload, "unable to determine a single payload object, found: "
+ "[" + payload + "] and [" + value + "]s");
payload = value;
}
}
Assert.notNull(payload, "payload object must not be null");
return MessageBuilder.withPayload(payload).copyHeaders(headers).build();
}
public Object[] fromMessage(Message<?> message) {