16.11. DRL 故障排除的错误消息
Red Hat Decision Manager 为 DRL 错误提供了标准化消息,以帮助您进行故障排除并解决 DRL 文件中的问题。错误消息使用以下格式:
图 16.1. DRL 文件问题的错误消息格式
- 1st Block: 错误代码
- 2nd Block: 发生错误的 DRL 源中的行和列
- 第 3 个块: 问题的描述
- 4th Block: 组件在 DRL 源中(rule、function、query)发生错误
- 5th Block: 发生错误的 DRL 源中的 Pattern(如果适用)
Red Hat Decision Manager 支持以下标准化错误信息:
- 101:没有可行的替代方案
表示解析器到达决定点,但无法识别替代方案。
带有错误拼写的规则示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 错误消息
[ERR 101] Line 4:4 no viable alternative at input 'exits' in rule "simple rule"
[ERR 101] Line 4:4 no viable alternative at input 'exits' in rule "simple rule"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 没有规则名称的规则示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 错误消息
[ERR 101] Line 3:2 no viable alternative at input 'when'
[ERR 101] Line 3:2 no viable alternative at input 'when'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个示例中,解析程序在预期规则名称时遇到关键字,
因此当作为不正确的预期令牌时,它标志是正确的令牌。带有不正确的语法的规则示例
1: rule "simple rule" 2: when 3: Student( name == "Andy ) // Must be `"Andy"` 4: then 5: end
1: rule "simple rule" 2: when 3: Student( name == "Andy ) // Must be `"Andy"` 4: then 5: endCopy to Clipboard Copied! Toggle word wrap Toggle overflow 错误消息
[ERR 101] Line 0:-1 no viable alternative at input '<eof>' in rule "simple rule" in pattern Student
[ERR 101] Line 0:-1 no viable alternative at input '<eof>' in rule "simple rule" in pattern StudentCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意行和列值为
0:-1表示解析器到达源文件的结尾(<eof>),但遇到不完整的结构,通常是因为缺少引号"…"、postrophes'…'或括号(…)。- 102:不匹配的输入
表示解析器预期在当前输入位置缺少特定符号。
带有不完整规则语句的规则示例
1: rule simple_rule 2: when 3: $p : Person( // Must be a complete rule statement1: rule simple_rule 2: when 3: $p : Person( // Must be a complete rule statementCopy to Clipboard Copied! Toggle word wrap Toggle overflow 错误消息
[ERR 102] Line 0:-1 mismatched input '<eof>' expecting ')' in rule "simple rule" in pattern Person
[ERR 102] Line 0:-1 mismatched input '<eof>' expecting ')' in rule "simple rule" in pattern PersonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意行和列值为
0:-1表示解析器到达源文件的结尾(<eof>),但遇到不完整的结构,通常是因为缺少引号"…"、postrophes'…'或括号(…)。带有不正确的语法的规则示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 错误信息
[ERR 102] Line 5:36 mismatched input ',' expecting ')' in rule "Wrong syntax" in pattern Car [ERR 101] Line 5:57 no viable alternative at input 'type' in rule "Wrong syntax" [ERR 102] Line 5:106 mismatched input ')' expecting 'then' in rule "Wrong syntax"
[ERR 102] Line 5:36 mismatched input ',' expecting ')' in rule "Wrong syntax" in pattern Car [ERR 101] Line 5:57 no viable alternative at input 'type' in rule "Wrong syntax" [ERR 102] Line 5:106 mismatched input ')' expecting 'then' in rule "Wrong syntax"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个示例中,sntactic 问题会导致多个错误消息相互相关。用
&& 运算符替换逗号 的单个解决方案解决了所有错误。如果您遇到多个错误,则一次解决一个错误会导致上一个错误。- 103:失败的 predicate
表示验证语义 predicate 被评估为
false。这些语义 predicates 通常用于识别 DRL 文件中的组件关键字,如声明、规则、存在、不存在等等。带有无效关键字的规则示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 错误消息
[ERR 103] Line 6:0 rule 'rule_key' failed predicate: {(validateIdentifierKey(DroolsSoftKeywords.RULE))}? in rule[ERR 103] Line 6:0 rule 'rule_key' failed predicate: {(validateIdentifierKey(DroolsSoftKeywords.RULE))}? in ruleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有些文本行无效,因为它没有以 开头或者不是 DRL 关键字结构的一部分,因此解析器无法验证 DRL 的其余部分。注意此错误与
102类似,但通常涉及 DRL 关键字。- 104:不允许使用分号结束
表示规则条件中的
eval()子句使用分号;不能使用一个分号。带有
eval()和 trailing分号的规则示例1: rule "simple rule" 2: when 3: eval( abc(); ) // Must not use semicolon `;` 4: then 5: end
1: rule "simple rule" 2: when 3: eval( abc(); ) // Must not use semicolon `;` 4: then 5: endCopy to Clipboard Copied! Toggle word wrap Toggle overflow 错误消息
[ERR 104] Line 3:4 trailing semi-colon not allowed in rule "simple rule"
[ERR 104] Line 3:4 trailing semi-colon not allowed in rule "simple rule"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 105:与任何内容不匹配
表示,解析程序在 grammar 中到达子规则,该规则必须至少匹配一次替代,但 sub-rule 不匹配任何内容。解析器已输入了一个没有方法的分支。
在空条件中带有无效文本的规则示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 错误消息
[ERR 105] Line 2:2 required (...)+ loop did not match anything at input 'WHEN' in rule "empty condition"
[ERR 105] Line 2:2 required (...)+ loop did not match anything at input 'WHEN' in rule "empty condition"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,条件旨在为空,但使用单词
None。通过删除None(不是有效的 DRL 关键字、数据类型或模式结构)解决这个错误。
如果您遇到您无法解决的其他 DRL 错误消息,请联系您的红帽大客户经理。