I have created a Drools project by populating with HelloWorld rule, decision table and process files.
java_home is set to jdk11. When I am trying to run DroolsTest.java , it is throwing the below error:
java.lang.NullPointerException: Cannot invoke “org.kie.api.runtime.KieSession.insert(Object)” because “kSession” is null
at com.sample.DroolsTest.main(DroolsTest.java:25)
The same HelloWorld is working fine with Drools 7.74 version. I have copied kmodule.xml, DroolsTest.java and Sample.drl. Any help would be much much appreciated. Thank you.
kmodule.xml
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="rules" packages="com.sample.rules">
<ksession name="ksession-rules"/>
</kbase>
<kbase name="dtables" packages="com.sample.dtables">
<ksession name="ksession-dtables"/>
</kbase>
<kbase name="process" packages="com.sample.process">
<ksession name="ksession-process"/>
</kbase>
</kmodule>
DroolsTest :
package com.sample;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
/**
* This is a sample class to launch a rule.
*/
public class DroolsTest {
public static final void main(String[] args) {
try {
// load up the knowledge base
KieServices ks = KieServices.Factory.get();
System.out.println("KieServices:"+ks);
KieContainer kContainer = ks.getKieClasspathContainer();
System.out.println("kContainer:"+kContainer);
KieSession kSession = kContainer.newKieSession("ksession-rules");
System.out.println("kSession:"+kSession);
// go !
Message message = new Message();
message.setMessage("Hello World");
message.setStatus(Message.HELLO);
kSession.insert(message);
kSession.fireAllRules();
} catch (Throwable t) {
t.printStackTrace();
}
}
public static class Message {
public static final int HELLO = 0;
public static final int GOODBYE = 1;
private String message;
private int status;
public String getMessage() {
return this.message;
}
public void setMessage(String message) {
this.message = message;
}
public int getStatus() {
return this.status;
}
public void setStatus(int status) {
this.status = status;
}
}
}
Sample.drl:
package com.sample.rules
import com.sample.DroolsTest.Message;
rule “Hello World”
when
m : Message( status == Message.HELLO, myMessage : message )
then
System.out.println( myMessage );
m.setMessage( “Goodbye cruel world” );
m.setStatus( Message.GOODBYE );
update( m );
end
rule “GoodBye”
when
Message( status == Message.GOODBYE, myMessage : message )
then
System.out.println( myMessage );
end
I tried with eclipse and code ready studio. I tried with jdk 11 and jdk 17 . no luck..
bvp is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.