如何获得KieSession构建的结果(即规则编译器错误)?

时间:2018-06-25 16:44:56

标签: error-handling compiler-errors drools

我正在使用以下代码通过简单的测试规则集来测试DROOLS 7.0:

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

即使规则.drl文件中存在错误,也将返回KieSession实例,并且不会引发任何异常。我想检查规则编译的结果。 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的示例更加复杂,恕我直言。 用我在本文开头显示的简单两行代码创建KieSession时,是否有办法获得Session buid结果(即访问 KieBuilder )?

1 个答案:

答案 0 :(得分:1)

我正在回答我的问题,因为我刚刚找到了解决方法:

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
}

我想知道通过这种验证,实际规则编译是否执行了两次……但是无论如何,这种方法似乎可行。