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:
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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.");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user