diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProcessor.java index 0c90e19702..fe75788b4c 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/AbstractMessageProcessor.java @@ -43,9 +43,11 @@ public abstract class AbstractMessageProcessor implements MessageProcessor { return this.evaluationContext; } - protected Object evaluateExpression(Expression expression, Message message) { + protected Object evaluateExpression(Expression expression, Message message, Class expectedType) { try { - return expression.getValue(this.evaluationContext, message); + return (expectedType != null && expectedType != void.class) + ? expression.getValue(this.evaluationContext, message, expectedType) + : expression.getValue(this.evaluationContext, message); } catch (EvaluationException e) { Throwable cause = e.getCause(); diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/ExpressionEvaluatingMessageProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/ExpressionEvaluatingMessageProcessor.java index e07af37354..5e13e63032 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/ExpressionEvaluatingMessageProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/ExpressionEvaluatingMessageProcessor.java @@ -37,6 +37,8 @@ public class ExpressionEvaluatingMessageProcessor extends AbstractMessageProcess private final Expression expression; + private volatile Class expectedType = null; + public ExpressionEvaluatingMessageProcessor(String expression) { try { @@ -49,8 +51,12 @@ public class ExpressionEvaluatingMessageProcessor extends AbstractMessageProcess } + public void setExpectedType(Class expectedType) { + this.expectedType = expectedType; + } + public Object processMessage(Message message) { - return this.evaluateExpression(this.expression, message); + return this.evaluateExpression(this.expression, message, this.expectedType); } } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/handler/MethodInvokingMessageProcessor.java b/spring-integration-core/src/main/java/org/springframework/integration/handler/MethodInvokingMessageProcessor.java index 685db2c6e3..00f8365a06 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/handler/MethodInvokingMessageProcessor.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/handler/MethodInvokingMessageProcessor.java @@ -159,7 +159,8 @@ public class MethodInvokingMessageProcessor extends AbstractMessageProcessor { for (HandlerMethod candidate : candidates) { try { Expression expression = candidate.getExpression(); - Object result = this.evaluateExpression(expression, message); + Class expectedType = candidate.method.getReturnType(); + Object result = this.evaluateExpression(expression, message, expectedType); if (this.requiresReply) { Assert.notNull(result, "Expression evaluation result was null, but this processor requires a reply."); }