Как получить результат сборки KieSession (т.е. ошибки компилятора правил)? - PullRequest
0 голосов
/ 25 июня 2018

Я тестирую DROOLS 7.0 с простым набором правил тестирования, используя следующий код:

KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
KieSession ksession = kc.newKieSession("DroolsTestKS");
...

Экземпляр KieSession возвращается, даже если в файле правила .drl есть ошибки, и исключение не выдается. Я хотел бы проверить результат составления правил. Ссылка Drools (см. 4.2.2.4) говорит, что результат сборки может быть получен с помощью:

KieServices kieServices = KieServices.Factory.get();
KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll();
assertEquals( 0, kieBuilder.getResults().getMessages( Message.Level.ERROR ).size() );

где kfs - это экземпляр KieFileSystem, но примеры того, как создать такую ​​KieFileSystem на предыдущих страницах руководства, гораздо более сложны и немного запутаны IMHO. Есть ли способ получить результат Session Buid (т.е. получить доступ к KieBuilder ) при создании KieSession с простыми двумя строками кода, которые я показываю в начале этого поста?

1 Ответ

0 голосов
/ 25 июня 2018

Я отвечаю на свой вопрос, потому что я только что нашел решение:

KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
Results rs = kc.verify("KBase");
if (rs.hasMessages(Level.ERROR)) {
  System.out.println("ERRORI DROOLS: " + rs.getMessages());
  ... // handle this
}

Мне интересно, если с помощью этой проверки фактическая компиляция правил выполняется дважды или нет ... но в любом случаекажется, этот метод работает.

...