Drools ClassFieldReader|BaseDateClassFieldReader Nullpointerexception while firing rules

Latest response

We are using drools-core-6.3.0.Final-redhat-5.jar.
The Rules are being executed in an embedded container in our application.
While executing the Rules in the container, for few scenarios we notice the following error.
These issues are not reproducible in unit test mode, while trying to simulate with the same fact data as available during application execution.
Sometimes the rule actually fires (I see the logs for the Then side of a rule), and we still observe this exception.

How can we track, if this is a specific rule which is throwing this exception everytime or some issue with the fact?
I am unable to pin it on the facts, since similar fact with slightly different data values works fine.

java.lang.NullPointerException
at org.drools.core.base.extractors.BaseDateClassFieldReader.getLongValue(BaseDateClassFieldReader.java:80)
at org.drools.core.base.extractors.BaseDateClassFieldReader.getHashCode(BaseDateClassFieldReader.java:111)
at org.drools.core.base.ClassFieldReader.getHashCode(ClassFieldReader.java:197)
at org.drools.core.rule.Declaration.getHashCode(Declaration.java:298)
at org.drools.core.util.AbstractHashTable$TripleCompositeIndex.hashCodeOf(AbstractHashTable.java:713)
at org.drools.core.util.index.LeftTupleIndexHashTable.getOrCreate(LeftTupleIndexHashTable.java:449)
at org.drools.core.util.index.LeftTupleIndexHashTable.add(LeftTupleIndexHashTable.java:379)
at org.drools.core.phreak.PhreakAccumulateNode.doLeftInserts(PhreakAccumulateNode.java:145)
at org.drools.core.phreak.PhreakAccumulateNode.doNode(PhreakAccumulateNode.java:95)
at org.drools.core.phreak.RuleNetworkEvaluator.switchOnDoBetaNode(RuleNetworkEvaluator.java:565)
at org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:536)
at org.drools.core.phreak.RuleNetworkEvaluator.evalNode(RuleNetworkEvaluator.java:372)
at org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:332)
at org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:166)
at org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:123)
at org.drools.core.phreak.RuleExecutor.evaluateNetwork(RuleExecutor.java:65)
at org.drools.core.common.DefaultAgenda.evaluateEagerList(DefaultAgenda.java:1004)
at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:961)
at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1292)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1294)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1281)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1260)
at com.highmark.eitmet.transformers.CorrelationEngineTransformer.triggerCorrelationBusinessRule(CorrelationEngineTransformer.java:113)
at com.highmark.eitmet.transformers.CorrelationEngineTransformer.transform(CorrelationEngineTransformer.java:60)
at com.highmark.gupfdr.federator.UniversalFederator.federate(UniversalFederator.java:31)
at com.highmark.gupfdr.ejb.FederationProcessBean.process(FederationProcessBean.java:189)
at com.ibm.websphere.scheduler.EJSRemoteCSLWRITETO_DB_FEDERATOR_bbf2322f.process(EJSRemoteCSLWRITETO_DB_FEDERATOR_bbf2322f.java)
at com.ibm.websphere.scheduler._TaskHandler_Stub.process(_TaskHandler_Stub.java:269)
at com.highmark.gupfdr.federator.FederatorThreadRunner.run(FederatorThreadRunner.java:36)
at com.ibm.ws.asynchbeans.J2EEContext$RunProxy.run(J2EEContext.java:270)
at java.security.AccessController.doPrivileged(AccessController.java:311)
at javax.security.auth.Subject.doAs(Subject.java:494)
at com.ibm.websphere.security.auth.WSSubject.doAs(WSSubject.java:133)
at com.ibm.websphere.security.auth.WSSubject.doAs(WSSubject.java:91)
at com.ibm.ws.asynchbeans.J2EEContext$DoAsProxy.run(J2EEContext.java:337)
at java.security.AccessController.doPrivileged(AccessController.java:341)
at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:805)
at com.ibm.ws.asynchbeans.WorkWithExecutionContextImpl.go(WorkWithExecutionContextImpl.java:222)
at com.ibm.ws.asynchbeans.ABWorkItemImpl.run(ABWorkItemImpl.java:206)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1881)

or :

java.lang.NullPointerException
at org.drools.core.base.ClassFieldReader.getHashCode(ClassFieldReader.java:197)
at org.drools.core.rule.Declaration.getHashCode(Declaration.java:298)
at org.drools.core.util.AbstractHashTable$TripleCompositeIndex.hashCodeOf(AbstractHashTable.java:713)
at org.drools.core.util.index.LeftTupleIndexHashTable.getOrCreate(LeftTupleIndexHashTable.java:449)
at org.drools.core.util.index.LeftTupleIndexHashTable.add(LeftTupleIndexHashTable.java:379)
at org.drools.core.phreak.PhreakAccumulateNode.doLeftInserts(PhreakAccumulateNode.java:145)
at org.drools.core.phreak.PhreakAccumulateNode.doNode(PhreakAccumulateNode.java:95)
at org.drools.core.phreak.RuleNetworkEvaluator.switchOnDoBetaNode(RuleNetworkEvaluator.java:565)
at org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:536)
at org.drools.core.phreak.RuleNetworkEvaluator.evalNode(RuleNetworkEvaluator.java:372)
at org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:332)
at org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:166)
at org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:123)
at org.drools.core.phreak.RuleExecutor.evaluateNetwork(RuleExecutor.java:65)
at org.drools.core.common.DefaultAgenda.evaluateEagerList(DefaultAgenda.java:1004)
at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:961)
at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1292)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1294)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1281)
at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1260)
at com.highmark.eitmet.transformers.CorrelationEngineTransformer.triggerCorrelationBusinessRule(CorrelationEngineTransformer.java:113)
at com.highmark.eitmet.transformers.CorrelationEngineTransformer.transform(CorrelationEngineTransformer.java:60)
at com.highmark.gupfdr.federator.UniversalFederator.federate(UniversalFederator.java:31)
at com.highmark.gupfdr.ejb.FederationProcessBean.process(FederationProcessBean.java:189)
at com.ibm.websphere.scheduler.EJSRemoteCSLWRITETO_DB_FEDERATOR_bbf2322f.process(EJSRemoteCSLWRITETO_DB_FEDERATOR_bbf2322f.java)
at com.ibm.websphere.scheduler._TaskHandler_Stub.process(_TaskHandler_Stub.java:269)
at com.highmark.gupfdr.federator.FederatorThreadRunner.run(FederatorThreadRunner.java:36)
at com.ibm.ws.asynchbeans.J2EEContext$RunProxy.run(J2EEContext.java:270)
at java.security.AccessController.doPrivileged(AccessController.java:311)
at javax.security.auth.Subject.doAs(Subject.java:494)
at com.ibm.websphere.security.auth.WSSubject.doAs(WSSubject.java:133)
at com.ibm.websphere.security.auth.WSSubject.doAs(WSSubject.java:91)
at com.ibm.ws.asynchbeans.J2EEContext$DoAsProxy.run(J2EEContext.java:337)
at java.security.AccessController.doPrivileged(AccessController.java:341)
at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:805)
at com.ibm.ws.asynchbeans.WorkWithExecutionContextImpl.go(WorkWithExecutionContextImpl.java:222)
at com.ibm.ws.asynchbeans.ABWorkItemImpl.run(ABWorkItemImpl.java:206)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1881)

Responses

After further testing I found that this issue is reproducible in local Unit test with Kie 6.3 and drools core 6.3.0 Final Jars. This does not seem to occur with Drools 5.x version

Same issue with drools-core-6.4 as well.

Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.