Skip to content

Commit 5801af9

Browse files
committed
SPR-7244: double indexing with a collection of different types of element
1 parent d0393ea commit 5801af9

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

org.springframework.expression/src/main/java/org/springframework/expression/spel/ast/Indexer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public TypedValue getValueInternal(ExpressionState state) throws EvaluationExcep
8989
}
9090

9191
// Indexing into a Map
92-
if (targetObjectTypeDescriptor.isMap()) {
92+
if (targetObject instanceof Map) {
9393
if (targetObject == null) {
9494
// Current decision: attempt to index into null map == exception and does not just return null
9595
throw new SpelEvaluationException(getStartPosition(),SpelMessage.CANNOT_INDEX_INTO_NULL_VALUE);

org.springframework.expression/src/test/java/org/springframework/expression/spel/SpringEL300Tests.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.expression.spel;
1818

1919
import java.util.HashMap;
20+
import java.util.LinkedHashMap;
2021
import java.util.Map;
2122
import java.util.Properties;
2223

@@ -28,6 +29,7 @@
2829
import org.springframework.expression.EvaluationContext;
2930
import org.springframework.expression.EvaluationException;
3031
import org.springframework.expression.Expression;
32+
import org.springframework.expression.ExpressionParser;
3133
import org.springframework.expression.ParserContext;
3234
import org.springframework.expression.PropertyAccessor;
3335
import org.springframework.expression.TypedValue;
@@ -673,4 +675,27 @@ public void elvis_SPR7209_2() {
673675
Assert.assertEquals("default", expr.getValue());
674676
}
675677

678+
@Test
679+
@SuppressWarnings("unchecked")
680+
public void testMapOfMap_SPR7244() throws Exception {
681+
Map<String,Object> map = new LinkedHashMap();
682+
map.put("uri", "http:");
683+
Map nameMap = new LinkedHashMap();
684+
nameMap.put("givenName", "Arthur");
685+
map.put("value", nameMap);
686+
687+
StandardEvaluationContext ctx = new StandardEvaluationContext(map);
688+
ExpressionParser parser = new SpelExpressionParser();
689+
String el1 = "#root['value'].get('givenName')";
690+
Expression exp = parser.parseExpression(el1);
691+
Object evaluated = exp.getValue(ctx);
692+
Assert.assertEquals("Arthur", evaluated);
693+
694+
String el2 = "#root['value']['givenName']";
695+
exp = parser.parseExpression(el2);
696+
evaluated = exp.getValue(ctx);
697+
Assert.assertEquals("Arthur",evaluated);
698+
}
699+
700+
676701
}

0 commit comments

Comments
 (0)