org.drools.reteoo的NullPointerException.ReteooBuilder.removeRule(ReteooBuilder.java:252)

时间:2013-04-12 09:33:32

标签: java nullpointerexception drools

我正在使用drools expert 5.4.0.Final,我正在动态创建规则DRL,将其添加到知识库并触发规则。 我试图在稍后(添加DRL之后)禁用/启用规则。为实现这一目标,我试图从禁用知识库中删除规则,如下所示:

    KnowledgeBase sessionBase = kSession.getKnowledgeBase();
    sessionBase.removeRule(RULE_PACKAGE_NAME, name);

这是第一次正常工作。

然后,我再次添加DRL启用规则,如下所示:

    kBuilder.add(ResourceFactory.newByteArrayResource(rule.toDrl().getBytes()),
                ResourceType.DRL);
    kBase.addKnowledgePackages(kBuilder.getKnowledgePackages());

然后,当我再次禁用它时,我得到以下异常:

    Caused by: java.lang.NullPointerException
at org.drools.reteoo.ReteooBuilder.removeRule(ReteooBuilder.java:259)
at org.drools.reteoo.ReteooRuleBase.removeRule(ReteooRuleBase.java:459)
at org.drools.common.AbstractRuleBase.removeRule(AbstractRuleBase.java:1107)
at org.drools.common.AbstractRuleBase.removeRule(AbstractRuleBase.java:1085)
at org.drools.impl.KnowledgeBaseImpl.removeRule(KnowledgeBaseImpl.java:208)
    ...

显然这个问题已经在早期版本的drools中得到了解决。 任何帮助深表感谢。感谢。

2 个答案:

答案 0 :(得分:0)

尝试5.5.1-SNAPSHOT,他们改变了规则删除算法(它现在是迭代的,过去是递归的)。这可能解决了这个问题。

编辑:在5.5.0.Final中不是,它只在5.5.1-SNAPSHOT中

答案 1 :(得分:0)

我的不好......我的申请出了问题。 我仍然在5.4.0.Final,自从我每次添加新规则后在知识构建器中开始记录规则名称时,NPE已经消失了! 谢谢你的帮助。