14.11. DRL 故障排除的错误消息


Red Hat Process Automation Manager 为 DRL 错误提供标准化的信息,以帮助您对 DRL 文件中的问题进行故障排除和解决问题。错误消息使用以下格式:

图 14.1. DRL 文件问题的错误消息格式

  • 1st Block: Error code
  • 发生错误的 DRL 源中的 2nd Block: Line 和 column
  • 第 3 个块: 问题的描述
  • 4th Block: 发生错误的 DRL 源(规则、函数、查询)中的组件
  • 5th Block: 在发生错误的 DRL 源中的模式(如果适用)

Red Hat Process Automation 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;),但遇到不完整的结构,通常是因为缺少引号 "…​"、apostrophes '…​' 或括号 (…​)

102: 不匹配的输入

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

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

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;),但遇到不完整的结构,通常是因为缺少引号 "…​"、apostrophes '…​' 或括号 (…​)

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

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

在本例中,syntactic 问题会导致多个与彼此相关的错误消息。使用 & amp;& 运算符替换逗号的单一解决方案会解决所有错误。 如果您遇到多个错误,请一次解决,以防出现以前的错误。

103: failed 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 () 和尾部分号的规则示例

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: 不与任何项匹配

表示解析器在语法中达到了一个子规则,它必须至少匹配一次,但子规则与任何规则不匹配。解析器已输入了一个分支,无需超时。

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

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