commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Ate Douma (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (JEXL-245) Engine in strict mode fails to fail on unsolvable variables or properties
Date Fri, 01 Dec 2017 17:06:00 GMT

     [ https://issues.apache.org/jira/browse/JEXL-245?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Ate Douma updated JEXL-245:
---------------------------
    Description: 
I've run into some unexpected behavior where the expectancy is that the Engine throws a unsolvable
property exception.

Example code:

{code:java}
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");
    }
}{code}
Which produces the following output:
{code}
test (foo.bar): null
test (foo.bar.baz): null
test (foo.baz): JexlTest.testJexl@1:4 unsolvable property 'baz'
{code}

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. 

  was:
I've been running into some weird and unexpected behavior where the expectancy is that the
Engine throws a unsolvable property exception.

Example code:

{code:java}
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");
    }
}{code}
Which produces the following output:
{code}
test (foo.bar): null
test (foo.bar.baz): null
test (foo.baz): JexlTest.testJexl@1:4 unsolvable property 'baz'
{code}

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. 


> Engine in strict mode fails to fail on unsolvable variables or properties 
> --------------------------------------------------------------------------
>
>                 Key: JEXL-245
>                 URL: https://issues.apache.org/jira/browse/JEXL-245
>             Project: Commons JEXL
>          Issue Type: Bug
>    Affects Versions: 3.1
>            Reporter: Ate Douma
>
> I've run into some unexpected behavior where the expectancy is that the Engine throws
a unsolvable property exception.
> Example code:
> {code:java}
> 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");
>     }
> }{code}
> Which produces the following output:
> {code}
> test (foo.bar): null
> test (foo.bar.baz): null
> test (foo.baz): JexlTest.testJexl@1:4 unsolvable property 'baz'
> {code}
> 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. 



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message