[
https://issues.apache.org/jira/browse/JEXL-403?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17759945#comment-17759945
]
Henri Biestro edited comment on JEXL-403 at 8/29/23 1:52 PM:
-------------------------------------------------------------
I must be missing something, so far I'm not reproducing the pb. The following
code works correctly on JEXL 3.3 trunk.
Commit
[cd3db9|https://github.com/apache/commons-jexl/commit/cd3db936723ca8e5c7bf68a62f23f15642ce992a]
{code}
@Test
public void test403() {
final JexlContext ctxt = new MapContext();
String src = "var a = {'a': 1};\n" +
"var list = [a, a];\n" +
"let map1 = {:};\n" +
"for (var item : list) {\n" +
" map1[`${item.a}`] = 1;\n" +
"}\n " +
"map1";
final JexlEngine jexl = new JexlBuilder().create();
JexlScript script = jexl.createScript(src);
for(int i = 0; i < 2; ++ i) {
Object result = script.execute(ctxt);
Assert.assertTrue(result instanceof Map);
Map<?, ?> map = (Map<?, ?>) result;
Assert.assertEquals(1, map.size());
Assert.assertTrue(map.containsKey(1));
Assert.assertTrue(map.containsValue(1));
}
}
{code}
was (Author: henrib):
I must be missing something, so far I'm not reproducing the pb. The following
code works correctly on JEXL 3.3 trunk.
{code}
@Test
public void test403() {
final JexlContext ctxt = new MapContext();
String src = "var a = {'a': 1};\n" +
"var list = [a, a];\n" +
"let map1 = {:};\n" +
"for (var item : list) {\n" +
" map1[`${item.a}`] = 1;\n" +
"}\n " +
"map1";
final JexlEngine jexl = new JexlBuilder().create();
JexlScript script = jexl.createScript(src);
for(int i = 0; i < 2; ++ i) {
Object result = script.execute(ctxt);
Assert.assertTrue(result instanceof Map);
Map<?, ?> map = (Map<?, ?>) result;
Assert.assertEquals(1, map.size());
Assert.assertTrue(map.containsKey(1));
Assert.assertTrue(map.containsValue(1));
}
}
{code}
> Failed while evaluating template in loop.
> -----------------------------------------
>
> Key: JEXL-403
> URL: https://issues.apache.org/jira/browse/JEXL-403
> Project: Commons JEXL
> Issue Type: Bug
> Affects Versions: 3.3
> Reporter: Xu Pengcheng
> Assignee: Henri Biestro
> Priority: Major
>
> code:
> {code:java}
> var a = {'a': 1};
> var list = [a, a];
> let map1 = {:};
> for (var item : list) {
> map1[`${item.a}`] = 1;
> } {code}
> The fist iteration is ok, but failed at the second time.
> error stack
> {code:java}
> Caused by: java.lang.ClassCastException: class
> org.apache.commons.jexl3.internal.introspection.MapSetExecutor cannot be cast
> to class org.apache.commons.jexl3.internal.TemplateEngine$TemplateExpression
> (org.apache.commons.jexl3.internal.introspection.MapSetExecutor and
> org.apache.commons.jexl3.internal.TemplateEngine$TemplateExpression are in
> unnamed module of loader 'app')
> at
> org.apache.commons.jexl3.internal.Interpreter.visit(Interpreter.java:1909)
> at
> org.apache.commons.jexl3.parser.ASTJxltLiteral.jjtAccept(ASTJxltLiteral.java:54)
> at
> org.apache.commons.jexl3.internal.Interpreter.executeAssign(Interpreter.java:1558)
> at
> org.apache.commons.jexl3.internal.Interpreter.visit(Interpreter.java:1319)
> at
> org.apache.commons.jexl3.parser.ASTAssignment.jjtAccept(ASTAssignment.java:19)
> at
> org.apache.commons.jexl3.internal.Interpreter.visitBlock(Interpreter.java:615)
> at
> org.apache.commons.jexl3.internal.Interpreter.visit(Interpreter.java:594)
> at org.apache.commons.jexl3.parser.ASTBlock.jjtAccept(ASTBlock.java:35)
> at
> org.apache.commons.jexl3.internal.Interpreter.forIterator(Interpreter.java:700)
> at
> org.apache.commons.jexl3.internal.Interpreter.visit(Interpreter.java:639)
> {code}
> Thanks!
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)