Hi,

I am using commons-jexl3 version 3.3.
Below is the sample code, where i am trying to call some functions that
return boolean.

I am running into some issues as mentioned in this email. I wonder if i am
missing something here.

------------------------------------------------------------------------------------------------------

import org.apache.commons.jexl3.JexlBuilder;
import org.apache.commons.jexl3.JexlContext;
import org.apache.commons.jexl3.JexlEngine;
import org.apache.commons.jexl3.JexlExpression;
import org.apache.commons.jexl3.MapContext;

public class ComparisonExpressionUtils1 {

  public boolean isConditionExpressionMatching(final String expression) {
    JexlEngine jexlEngine = new JexlBuilder().create();
    JexlContext context = new MapContext();
    context.set("this", this);
    JexlExpression jexlExpression = jexlEngine.createExpression(expression);
    return (boolean) jexlExpression.evaluate(context);
  }

  public boolean attributeExists(final String key) {
    return false;
  }

  public boolean isEquals(final String key, final String value) {
    return false;
  }

  public static void main(String[] args) {
    ComparisonExpressionUtils1 comparisonExpressionUtils =
        new ComparisonExpressionUtils1();

System.out.println(comparisonExpressionUtils.isConditionExpressionMatching(
        "((!this.attributeExists('Id') &&
!this.attributeExists('Title_Inv')) || this.attributeExists('Author')) ||
((this.isEquals('Id', ':Id')) && ((this.isEquals('Price', ':Price')) ||
((this.isEquals('inv', ':inv')) && (this.isEquals('Title', ':Title')))))"));
  }

}

------------------------------------------------------------------------------------------------------


This is running into error:

org.apache.phoenix.expression.util.map.ComparisonExpressionUtils1.isConditionExpressionMatching:33@1:4
JEXL error : ! error caused by null operand
..
..
Caused by: org.apache.commons.jexl3.JexlArithmetic$NullOperand
at
org.apache.commons.jexl3.internal.Operators.controlNullOperands(Operators.java:104)
at
org.apache.commons.jexl3.internal.Operators.tryOverload(Operators.java:126)
at org.apache.commons.jexl3.internal.Interpreter.visit(Interpreter.java:536)
at org.apache.commons.jexl3.parser.ASTNotNode.jjtAccept(ASTNotNode.java:19)
at org.apache.commons.jexl3.internal.Interpreter.visit(Interpreter.java:843)
at org.apache.commons.jexl3.parser.ASTAndNode.jjtAccept(ASTAndNode.java:19)
at
org.apache.commons.jexl3.internal.Interpreter.visit(Interpreter.java:1109)
at
org.apache.commons.jexl3.parser.ASTReferenceExpression.jjtAccept(ASTReferenceExpression.java:36)
at org.apache.commons.jexl3.internal.Interpreter.visit(Interpreter.java:866)
at org.apache.commons.jexl3.parser.ASTOrNode.jjtAccept(ASTOrNode.java:19)
at
org.apache.commons.jexl3.internal.Interpreter.visit(Interpreter.java:1109)
at
org.apache.commons.jexl3.parser.ASTReferenceExpression.jjtAccept(ASTReferenceExpression.java:36)
at org.apache.commons.jexl3.internal.Interpreter.visit(Interpreter.java:866)
at org.apache.commons.jexl3.parser.ASTOrNode.jjtAccept(ASTOrNode.java:19)
at
org.apache.commons.jexl3.internal.Interpreter.visit(Interpreter.java:1098)
at
org.apache.commons.jexl3.parser.ASTJexlScript.jjtAccept(ASTJexlScript.java:60)
at
org.apache.commons.jexl3.internal.Interpreter.interpret(Interpreter.java:118)
at org.apache.commons.jexl3.internal.Script.execute(Script.java:197)
at org.apache.commons.jexl3.internal.Script.evaluate(Script.java:189)
... 2 more


Please let me know if I am missing something obvious.

Thanks

Reply via email to