Drools 5引入了一个标准化的错误信息。 标准化的目的在于更快、 更容易地帮助用户发现和解决问题。
在本章, 你将学习如何确定和解释这些错误信息, 而且你也会收到如何解决这些问题的一些相关提示。
信息格式
标准化包括错误信息格式和更好地解释这种格式,让我们看如下例子:
1st Block: 这个区域确定错误代码。
2nd Block: 行列信息。
3rd Block: 描述该问题的一些文本。
4th Block: 这是第一个上下文。通常表示发生错误的规则、函数、模板或查询。 该块不是强制性的。
5th Block: 确定发生错误的模式(pattern)。该块不是强制性的。
错误信息描述
101 :no viable alternative 没有可行的选择
表示最普通的错误,解析器走到一个决策点,但不能确定一个选择方案,下面是一些例子:
rule one
when
exists Foo()
exits Bar()
then
end
上面这个规则 会产生如下
[ERR 101] Line 4:4 no viable alternative at input 'exits' in rule one 乍一看,这似乎是有效的语法,但不是(exits != exists)
102:Mismatched input 输入不匹配
rule
when
Object()
then
System.out.println("A RHS");
end
上面这个规则 会产生如下
[ERR 102] Line 5:0 mismatched input 'when' in rule 这个信息表示解析器遭遇符号 WHEN,实际是一个硬关键字,但是它在一个错误的地方,因为规则的名字遗漏了。
当你犯了一个简单的词汇错误时,也会发生“no viable alternative”错误
rule simple_rule
when
Person( name == "aaa )
then
end
上面这个规则 会产生如下
[ERR 102] Line 8:4 mismatched input ''
Line 8:4 unexpected exception at input '<eof>'. Exception:
提示:通常行列号信息是精确的,但是在某些情况下(如没有关闭引号),解析器产生 0:-1 位置。在这种情况下,你应该检查是否你没有关闭引号、撇号、圆括号。
rule simple_rule
when
foo3 : Bar(
then
end
上面这个规则 会产生如下
Line 7:0 unexpected exception at input '<eof>'. Exception:
提示:通常当你得到 0:-1 位置时,它表示解决器到达了源代码的结束位置。
103: Failed predicate (谓词失败)
package rules;
import com.jars1.jars1.Person;
asdasd
rule "test something"
when
p: Person( name=="aaa" )
then
end
[ERR 107] Line 4:0 mismatched input 'asdasd' expecting one of the following tokens: '[package, import, global, declare, function, rule, query]'.
asdasd 文本是无效的,解析器不能确定它为软关键字规则。
提示:这个错误非常相似 102: Mismatched input,但通常涉及到软关键字。
104: Trailing semi-colon not allowed
105: Early Exit
下面是小编的微信转帐二维码,小编再次谢谢读者的支持,小编会更努力的
----请看下方↓↓↓↓↓↓↓
百度搜索 Drools从入门到精通:可下载开源全套Drools教程
深度Drools教程不段更新中:
更多Drools实战陆续发布中………
扫描下方二维码关注公众号 ↓↓↓↓↓↓↓↓↓↓