2013-06-26 6 views
0

Я работаю с экспертом drools 6.0.0.Beta3 (последний доступен на странице загрузки), и я пытаюсь обновить правило, существующее в рабочей памяти. В принципе, я звоню добавить() из kBuilder снова, как так:drools 6.0.0.Beta3 NullPointerException

kBuilder.add(org.drools.io.ResourceFactory.newByteArrayResource(drl.getBytes()), 
      org.drools.builder.ResourceType.DRL); 

Когда я первый добавить правило, он будет добавлен, и даже срабатывает, когда условия удовлетворения. Тем не менее, при вызове добавить() снова, как описано выше, я получаю следующее исключение:

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) 
    ... 

ответ

1

Вы делаете что-то неправильно, поскольку пытается добавить такое же DRL дважды в KnowledgeBuilder будет в конечном итоге в том, то же правило, в два раза в базе знаний. Честно говоря, мне было бы интересно узнать, почему вы пытаетесь это сделать.

В любом случае у вас должна быть проблема с компиляцией, сообщающая о дублированном имени правила, а не в NPE. Это окончательно ошибка, о которой я сообщил here и уже зафиксирован на главном устройстве.

Спасибо, что нашли это.

+0

Как я уже сказал, я пытаюсь обновить правило. Drl для моего правила основан на пользовательском вводе - который может измениться - и я хочу обновить drl в соответствии с новым вводом. Есть ли другой способ, не добавляя снова правило, чтобы отразить изменения в drl? Трассировка стека соответствует тому, что у вас есть в описании ошибки. –