From 0afaa223446923736744a6f81179192d0cf8acd5 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Tue, 25 Aug 2009 21:28:40 +0000 Subject: [PATCH] INT-28 Customized the EL parser with 'CreateObjectIfAttemptToReferenceNull' and 'GrowListsOnIndexBeyondSize' configuration, and fixed index incrementing. --- .../aop/MessagePublishingInterceptor.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/aop/MessagePublishingInterceptor.java b/org.springframework.integration/src/main/java/org/springframework/integration/aop/MessagePublishingInterceptor.java index ad3b49db1e..674ad5a434 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/aop/MessagePublishingInterceptor.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/aop/MessagePublishingInterceptor.java @@ -28,7 +28,8 @@ import org.springframework.context.expression.MapAccessor; import org.springframework.expression.EvaluationContext; import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; -import org.springframework.expression.spel.SpelExpressionParserFactory; +import org.springframework.expression.spel.standard.SpelExpressionParser; +import org.springframework.expression.spel.standard.SpelExpressionParserConfiguration; import org.springframework.expression.spel.support.StandardEvaluationContext; import org.springframework.integration.channel.ChannelResolver; import org.springframework.integration.channel.MessageChannelTemplate; @@ -53,7 +54,9 @@ public class MessagePublishingInterceptor implements MethodInterceptor { private final ExpressionSource expressionSource; - private final ExpressionParser parser = SpelExpressionParserFactory.getParser(); + private final ExpressionParser parser = new SpelExpressionParser( + SpelExpressionParserConfiguration.CreateObjectIfAttemptToReferenceNull | + SpelExpressionParserConfiguration.GrowListsOnIndexBeyondSize); private final InboundMessageMapper messageMapper = new SimpleMessageMapper(); @@ -75,7 +78,7 @@ public class MessagePublishingInterceptor implements MethodInterceptor { } public final Object invoke(final MethodInvocation invocation) throws Throwable { - StandardEvaluationContext context = new StandardEvaluationContext(); + final StandardEvaluationContext context = new StandardEvaluationContext(); context.addPropertyAccessor(new MapAccessor()); Class targetClass = AopUtils.getTargetClass(invocation.getThis()); Method method = AopUtils.getMostSpecificMethod(invocation.getMethod(), targetClass); @@ -84,10 +87,10 @@ public class MessagePublishingInterceptor implements MethodInterceptor { int index = 0; Map argumentMap = new HashMap(); for (String argumentName : argumentNames) { - if (invocation.getArguments().length <= ++index) { + if (invocation.getArguments().length <= index) { break; } - argumentMap.put(argumentName, invocation.getArguments()[index]); + argumentMap.put(argumentName, invocation.getArguments()[index++]); } context.setVariable(this.expressionSource.getArgumentMapName(method), argumentMap); }