INT-1168 added a setExpectedType method to ExpressionEvaluatingMessageProcessor, NULL indicates no specific type is expected (behavior is in the base AbstractMessageProcessor)

This commit is contained in:
Mark Fisher
2010-06-11 21:29:24 +00:00
parent 16fab7af81
commit bfd6c81673
3 changed files with 13 additions and 4 deletions

View File

@@ -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();

View File

@@ -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);
}
}

View File

@@ -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.");
}