I am getting the following error when trying to insert my object into
ksession. I have attached my rules and java object. Please help me in
debugging why this is happening. I am using java 5 and drools 5.0
thanks
*error while inserting:*
org.drools.RuntimeDroolsException:
defaultpkg.Rule_CheckStationNumber_0Eval0Invoker@e4aea391 :
java.lang.NullPointerException
*rules.drl*
import java.lang.*;
import java.util.*;
import ct.fw.rules.*;
import ct.fw.utils.*;
import ct.fw.rules.*;
import ct.fw.logging.*;
import ct.fw.pf.dbi.*;
import ct.fw.pf.dao.*;
import ct.fw.pf.seq.*;
import ct.fw.pf.util.*;
import ct.fw.pf.vo.*;
import ct.fw.ex.*;
import org.apache.commons.lang.*;
import com.aa.gccp.domain.*;
global ct.fw.rules.AssertionObject ao
global ct.fw.logging.SmartLogger log
function BillingRecord getRecord(AssertionObject ao)
{
return (BillingRecord) ao.get(0);
}
function void debug(String msg,SmartLogger log)
{
log.debug(BusinessRulesValidator.class, msg);
}
function void error(String msg,SmartLogger log)
{
log.error(BusinessRulesValidator.class, msg);
System.out.println("Message from rules "+msg);
}
rule CheckTrue
when
eval(true)
then
System.out.println("evaluating true");
end
rule CheckTrue2
when
eval(true)
then
error("evaluating from rules2",log);
end
rule CheckStationNumber
when
eval(((getRecord(ao)).getStationNo()) == null)
then
error("station number should not be null",log);
end
*part where i load the rules and insert the facts. There is no error when
loading the rules.drl. That means no parsing errors. The error happens at
ksessio.insert(assertionObject).*
public void assertRulesObject(AssertionObject assertionObject) throws
BusinessRuleException
{
long current = System.currentTimeMillis();
KnowledgeBase kbase = knowledgeBasesMap.get(rulesFileName);
if (kbase == null)
{
kbase = knowledgeBasesMap.get(rulesFileName + DRL);
}
if ((kbase == null) || ((current - lastRefreshedMilliseconds) >
refreshTimeMilliseconds))
{
if (rulesFileName.toLowerCase().indexOf(DRL) == -1)
{
kbase = load(rulesFileName + DRL);
}
else
{
kbase = load(rulesFileName);
}
lastRefreshedMilliseconds = System.currentTimeMillis();
}
this.assertionObject = assertionObject;
List assertionobjectslist = new ArrayList();
*// i am just doing this part just to make sure assertion object is not null
and i will get some answer. this part runs fine. *
if (assertionObject != null)
{
assertionobjectslist = assertionObject.getValidationObjects();
String StationNumber = ((BillingRecord)
assertionObject.get(0)).getStationNo();
System.out.println("Station Number in assertion object is " +
StationNumber);
}
else
{
System.out.println("Assertion Object is null");
}
System.out.println("The number of objects in assertionobject is " +
assertionobjectslist.size());
try
{
StatefulKnowledgeSession ksession =
kbase.newStatefulKnowledgeSession();
*//the next line throws the exception*
ksession.insert(assertionObject);
ksession.fireAllRules();
ksession.dispose();
}
catch (RuntimeDroolsException e1)
{
throw new BusinessRuleException(e1.getMessage());
}
businessRulesErrors = assertionObject.getBusinessRulesErrors();
if (throwException)
{
if (!assertionObject.getBusinessRulesErrors().isEmpty())
{
throw new BusinessRuleException(businessRulesErrors);
}
}
}
Any help is appreciated. thanks