Hello,

I'm new to using JEXL and was surprised by the following behavior (see code
below). Obviously "badMethodName()" is not a method on the String "bar". I
expected JEXL to throw some appropriate exception. Rather, JEXL returned
null for the call, which is not a good thing, IMHO. Switching
"badMethodName() for a non-existing property call like
"properties['foo'].qux" also returns null.

I've stepped through the code and the behavior seems intentional.

Am I missing something, or is this a philosophical thing with JEXL? Trying
similar tests with JUEL, which is an implementation of the Java Unified
Expression Language throws exceptions as I expected.

I would much rather use JEXL however, but need to resolve this issue.

@Test
public void testPropertyExpression() throws Exception
{
    Properties properties = new Properties();
    properties.put("foo", "bar");

    JexlContext context = JexlHelper.createContext();
    context.getVars().put("properties", properties);

    Expression e = ExpressionFactory.createExpression
("properties['foo'].badMethodName()");
    String value = (String) e.evaluate(context);
    assertEquals("huh", value);
}

Thanks in advance,

G

Reply via email to