I am using the Feel engine (org.camunda.bpm.dmn:camunda-engine-dmn:7.14.0
) API from a Java app to evaluate feel expressions
FEEL_ENGINE.evalExpression(expression, variables)
The variables is a Map<String,Object>
The following expression evaluates correctly
(count(PRODUCT_CODES[list contains(["PROD1","PROD2","PROD3","PROD4"], item)]) = 2) and list contains(SEGMENT, "SEG1")
However this doesnt work (evaluates to NULL)
(count(PRODUCT_CODES[list contains(["PROD1","PROD2","PROD3","PROD4"], item)]) = 2) and ("SEG1" in SEGMENT)
I get this error -
java.lang.NullPointerException: Cannot invoke "java.lang.Boolean.booleanValue()" because the return value of "camundajar.impl.scala.util.Either.fold(camundajar.impl.scala.Function1, camundajar.impl.scala.Function1)" is null
at com.linkedin.commerce.rule.utils.FeelEngineHelper.evaluateFeelExpression(FeelEngineHelper.java:67)
at com.linkedin.commerce.rule.common.FeelRuleEngineImpl.evaluateFeelExpressionPredicate(FeelRuleEngineImpl.java:277)
at com.linkedin.commerce.rule.common.FeelRuleEngineImpl.evaluateLookupRulePredicate(FeelRuleEngineImpl.java:154)
at com.linkedin.commerce.rule.common.FeelRuleEngineImpl.lambda$evaluateRules$2(FeelRuleEngineImpl.java:102)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
at java.base/java.util.Spliterators$IteratorSpliterator.tryAdvance(Spliterators.java:1856)
at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
at one.util.streamex.AbstractStreamEx.findFirst(AbstractStreamEx.java:562)
Any ideas as to what could be going wrong ?