在drools中运行helloworld时获取空指针exception

运行简单的helloworld示例drools项目时出现以下错误。

199 [main] ERROR org.drools.compiler.kie.builder.impl.KieContainerImpl - Unknown KieSession name: ksession-rules java.lang.NullPointerException at com.sample.DroolsTest.main(DroolsTest.java:24) 

码:

 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(); KieContainer kContainer = ks.getKieClasspathContainer(); KieSession kSession = kContainer.newKieSession("ksession-rules"); // 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; } } } 

流氓代码:

 package com.sample 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 

看起来drools kie-api /内部库执行在drcols eclipse项目的src \ main \ resources \ META-INF \ maven \ pom.properties文件下查找强制值。

将我的pom.xml或pom.properties更新为以下内容在6.0.0 drools发行版上运行良好。

 groupId=com.test.sample.drools artifactId=DroolsTestProject version=1 

我最近开始使用JBPM并遇到了类似的问题。 我有两个问题需要解决。

首先,我需要创建此线程中另一个答案中列出的pom.properties文件。 我必须创建src / main / resources / META-INF / maven / pom.properties文件,因为当我通过eclipse创建一个新的JBPM Maven项目时它不会自动生成。 该文件应具有以下信息,这些信息应与项目的pom文件匹配:

 groupId=com.sample artifactId=jbpm-example version=1.0.0-SNAPSHOT 

我遇到的另一个问题是有一个空白的kmodule.xml。 这应该在src / main / resources / META-INF / kmodule.xml中。 您将需要文件中的以下内容:

      

如果查看newKieSession方法参数,则需要匹配ksession元素的“name”属性。 kbase元素的“packages”属性需要与DRL文件所在的包名称匹配。

这里的答案不太晚,但……

我检查了我的pom.properties文件,它只包含这个:

 groupId= artifactId= version= 

什么都没有定义! 将其更改为:

 groupId=DroolsTest artifactId=DroolsTest version=0.0.1-SNAPSHOT 

把你拥有的任何东西作为pom.xml中的那些属性并将它们放在pom.properties中解决了我的问题。 现在运行正常。

使用Maven配置示例项目依赖项。 您需要在命令行上运行“mvn eclipse:eclipse”,或者安装m2e Eclipse插件。

在将.drl文件添加到类路径之后有同样的问题并且工作正常,如下面的线程http://drools.46999.n3.nabble.com/Null-pointer-exception-when-adding-drools-to-existing-中所述。项目td4027944.html#a4028011

关于这个话题进行了非常有建设性的讨论,几乎把它钉在了这里: 讨论 。

检查你的kmodule.xml你必须在那里添加新的ksession。 此外,在该文件中定义新的kbase时,请确保每个kbase的名称不同,并且包名称是规则所在的位置。 ksession名称是您在启动ksession时在执行中指定的名称。