我正在使用drools expert 6.0.0.Beta3(最新在下载页面上提供),我正在尝试更新工作内存中存在的规则。基本上,我再次调用了kBuilder的add(),如下所示:
kBuilder.add(org.drools.io.ResourceFactory.newByteArrayResource(drl.getBytes()),
org.drools.builder.ResourceType.DRL);
当我第一次添加规则时,它会被添加,甚至在条件满足时触发。但是,当再次调用add()时,如上所述,我得到以下异常:
java.lang.NullPointerException
at org.drools.compiler.compiler.PackageBuilder.validateUniqueRuleNames(PackageBuilder.java:1314)
at org.drools.compiler.compiler.PackageBuilder.initPackageRegistry(PackageBuilder.java:916)
at org.drools.compiler.compiler.PackageBuilder.addPackage(PackageBuilder.java:869)
at org.drools.compiler.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:474)
at org.drools.compiler.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:670)
at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:51)
at org.drools.compiler.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:40)
at org.drools.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:34)
...
答案 0 :(得分:1)
你做错了,因为尝试将两次相同的DRL添加到KnowledgeBuilder最终会在知识库中两次使用相同的规则。老实说,我很想知道你为什么要这样做。
无论如何,您应该有一个报告重复规则名称而不是NPE的编译问题。这绝对是我报告here已经修复的错误。
感谢您找到了这个。