Drools 5引入了标准化的错误信息,可以快速的查找和解决问题。本节将介绍如何利用错误信息来进行快速定位问题和解决问题。

错误信息的各式如下图:

drools规则引擎之错误(异常)信息插图

第一部分:错误编码;

第二部分:错误出现的行列信息;

第三部分:错误信息描述;

第四部分:上下文的第一行信息,通常表示发生错误的规则,功能,模板或查询。此部分并不强制。

第五部分:标识发生错误的pattern(模式)。此部分并不强制。

下面以一组错误实例来分析常见的异常情况,首先用官网提供的例子来执行:

rule one
  when
    exists Foo()
    exits Bar()  // "exits"
  then
end

由于exits是错误的语法,因此会抛出异常,但此处需要注意的事在Drools 7中抛出的异常并非官网提供的异常。异常信息如下:

java.lang.RuntimeException: Error while creating KieBase[Message [id=1, kieBase=rules, level=ERROR, path=conditional1.drl, line=27, column=0
   text=[ERR 102] Line 27:6 mismatched input 'Bar' in rule "one" in pattern], Message [id=2, kieBase=rules, level=ERROR, path=conditional1.drl, line=0, column=0
   text=Parser returned a null Package]]

再看一个没有规则名称导致的错误:

rule
   when
    Object()
   then
     System.out.println("A RHS");
end

执行之后异常信息如下:

java.lang.RuntimeException: Error while creating KieBase[Message [id=1, kieBase=rules, level=ERROR, path=conditional1.drl, line=25, column=0
   text=[ERR 102] Line 25:3 mismatched input 'when' in rule], Message [id=2, kieBase=rules, level=ERROR, path=conditional1.drl, line=0, column=0
   text=Parser returned a null Package]]

很显然上面的异常是因为规则没有指定名称,而关键字when无法作为名称,因此在此处抛出异常。

格式不正确导致的异常:

ule test
   when
    foo3:Object(

异常信息如下:

java.lang.RuntimeException: Error while creating KieBase[Message [id=1, kieBase=rules, level=ERROR, path=conditional1.drl, line=0, column=0
   text=Line 26:16 unexpected exception at input '<eof>'. Exception: java.lang.NullPointerException. Stack trace:
 java.lang.NullPointerException

其他异常信息就不在这里赘述了,实际应用中不断的学习总结即可根据错误信息快速定位问题所在。

相关技术视频

QQ技术交流2群:715840230

CSDN学院:《Drools7规则引擎进阶教程》

CSDN学院:《Drools7规则引擎入门教程》

CSDN学院:《Drools7系列优惠套餐》

获得完整的《从Drools规则引擎到风控反洗钱系统》可评论留下邮箱。



drools规则引擎之错误(异常)信息插图(1)

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://choupangxia.com/2019/09/06/drools%e8%a7%84%e5%88%99%e5%bc%95%e6%93%8e%e4%b9%8b%e9%94%99%e8%af%af%ef%bc%88%e5%bc%82%e5%b8%b8%ef%bc%89%e4%bf%a1%e6%81%af/