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:没有可行的替代方案

表示解析器到达决定点,但无法识别替代方案。

带有错误拼写的规则示例

1: rule "simple rule"
2:   when
3:     exists Person()
4:     exits Student()  // Must be `exists`
5:   then
6: end
Copy to Clipboard Toggle word wrap

错误消息

[ERR 101] Line 4:4 no viable alternative at input 'exits' in rule "simple rule"
Copy to Clipboard Toggle word wrap

没有规则名称的规则示例

1: package org.drools.examples;
2: rule    // Must be `rule "rule name"` (or `rule rule_name` if no spacing)
3:   when
4:     Object()
5:   then
6:     System.out.println("A RHS");
7: end
Copy to Clipboard Toggle word wrap

错误消息

[ERR 101] Line 3:2 no viable alternative at input 'when'
Copy to Clipboard Toggle word wrap

在这个示例中,解析程序在预期规则名称时遇到关键字,因此当 作为不正确的预期令牌时,它标志是正确的令牌。

带有不正确的语法的规则示例

1: rule "simple rule"
2:   when
3:     Student( name == "Andy )  // Must be `"Andy"`
4:   then
5: end
Copy to Clipboard Toggle word wrap

错误消息

[ERR 101] Line 0:-1 no viable alternative at input '<eof>' in rule "simple rule" in pattern Student
Copy to Clipboard Toggle word wrap

注意

行和列值为 0:-1 表示解析器到达源文件的结尾(<eof&gt;),但遇到不完整的结构,通常是因为缺少引号 "…​"、postrophes '…​' 或括号 (…​)

102:不匹配的输入

表示解析器预期在当前输入位置缺少特定符号。

带有不完整规则语句的规则示例

1: rule simple_rule
2:   when
3:     $p : Person(
        // Must be a complete rule statement
Copy to Clipboard Toggle word wrap

错误消息

[ERR 102] Line 0:-1 mismatched input '<eof>' expecting ')' in rule "simple rule" in pattern Person
Copy to Clipboard Toggle word wrap

注意

行和列值为 0:-1 表示解析器到达源文件的结尾(<eof&gt;),但遇到不完整的结构,通常是因为缺少引号 "…​"、postrophes '…​' 或括号 (…​)

带有不正确的语法的规则示例

1: package org.drools.examples;
2:
3: rule "Wrong syntax"
4:   when
5:     not( Car( ( type == "tesla", price == 10000 ) || ( type == "kia", price == 1000 ) ) from $carList )
       // Must use `&&` operators instead of commas `,`
6:   then
7:     System.out.println("OK");
8: end
Copy to Clipboard Toggle word wrap

错误信息

[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 Toggle word wrap

在这个示例中,sntactic 问题会导致多个错误消息相互相关。用 & amp;& 运算符替换逗号 的单个解决方案解决了所有错误。 如果您遇到多个错误,则一次解决一个错误会导致上一个错误。

103:失败的 predicate

表示验证语义 predicate 被评估为 false。这些语义 predicates 通常用于识别 DRL 文件中的组件关键字,如 声明规则存在不存在 等等。

带有无效关键字的规则示例

 1: package nesting;
 2:
 3: import org.drools.compiler.Person
 4: import org.drools.compiler.Address
 5:
 6: Some text  // Must be a valid DRL keyword
 7:
 8: rule "test something"
 9:   when
10:     $p: Person( name=="Michael" )
11:   then
12:     $p.name = "other";
13:     System.out.println(p.name);
14: end
Copy to Clipboard Toggle word wrap

错误消息

[ERR 103] Line 6:0 rule 'rule_key' failed predicate: {(validateIdentifierKey(DroolsSoftKeywords.RULE))}? in rule
Copy to Clipboard Toggle word wrap

有些文本行 无效,因为它没有以 开头或者不是 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
Copy to Clipboard Toggle word wrap

错误消息

[ERR 104] Line 3:4 trailing semi-colon not allowed in rule "simple rule"
Copy to Clipboard Toggle word wrap

105:与任何内容不匹配

表示,解析程序在 grammar 中到达子规则,该规则必须至少匹配一次替代,但 sub-rule 不匹配任何内容。解析器已输入了一个没有方法的分支。

在空条件中带有无效文本的规则示例

1: rule "empty condition"
2:   when
3:     None  // Must remove `None` if condition is empty
4:   then
5:      insert( new Person() );
6: end
Copy to Clipboard Toggle word wrap

错误消息

[ERR 105] Line 2:2 required (...)+ loop did not match anything at input 'WHEN' in rule "empty condition"
Copy to Clipboard Toggle word wrap

在本例中,条件旨在为空,但使用单词 None。通过删除 None (不是有效的 DRL 关键字、数据类型或模式结构)解决这个错误。

注意

如果您遇到您无法解决的其他 DRL 错误消息,请联系您的红帽大客户经理。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat