Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
3.1
-
None
Description
I've run into some unexpected behavior where the expectancy is that the Engine throws a unsolvable property exception.
Example code:
import org.apache.commons.jexl3.*; public class JexlTest { public Object getBar() { return null; } private static void testJexl(final JexlEngine engine, final JexlContext ctx, final String expression) { System.out.print("test ("+expression+"): "); try { System.out.println(engine.createExpression(expression).evaluate(ctx)); } catch (JexlException e) { System.out.println(e.getMessage()); } } public static void main(final String[] args) throws Exception { MapContext ctx = new MapContext(); JexlEngine engine = new JexlBuilder().strict(true).silent(false).create(); ctx.set("foo", new JexlTest()); testJexl(engine, ctx, "foo.bar"); testJexl(engine, ctx, "foo.bar.baz"); testJexl(engine, ctx, "foo.baz"); } }
Which produces the following output:
test (foo.bar): null test (foo.bar.baz): null test (foo.baz): JexlTest.testJexl@1:4 unsolvable property 'baz'
The problem is with the second test where accessing the property foo.bar.baz of the non-existing variable bar is not throwing an exception.
The third test demonstrates a similar/same scenario where accessing the non-existing property foo.baz is throwing the expected exception.