NiFi表达式语言报Unexpected token ':'错误的典型原因是什么?
解决NiFi RouteOnAttribute中表达式语言的Unexpected Token错误
我来帮你分析下这个NiFi表达式语言的错误,我之前在处理RouteOnAttribute处理器时也遇到过类似的问题,这个报错的典型原因主要有以下几个:
字符串字面量未使用双引号包裹:这是你这个案例里最直接的原因。NiFi表达式语言中,像
contains()这类需要字符串参数的函数,必须把字符串值用双引号括起来。你写的${hostname:contains(prod)}里,prod没有加引号,解析器会把它当成一个属性名称去查找,而不是你想要的固定字符串。这种情况下,解析器在处理hostname:之后,无法识别后续的非法参数格式,就会抛出Unexpected token ':'的错误。正确的写法应该是${hostname:contains("prod")}。表达式语法结构不完整或错误:比如函数调用的括号不匹配、属性名与函数之间的冒号位置错误(漏写或多写),不过从你的报错位置和执行语句来看,这个可能性较低,但如果表达式里存在其他语法疏漏,也可能触发类似的解析错误。
属性名称拼写错误:如果你的流文件属性名不是
hostname,而是其他拼写(比如host_name或者hostName),解析器找不到对应属性时,偶尔也会因为解析逻辑的问题触发令牌错误(虽然通常会伴随属性不存在的提示,但特殊场景下会出现这类语法报错)。
内容的提问来源于stack exchange,提问作者Dennis Jaheruddin




