Question about Java API behavior

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 ?

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.