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