我是drools的新手。我正在写一条新规则。但我得到的错误如下:
输入不匹配'。'在规则" StopTextRule"在模式
我的规则是
package com.******.*****;
import java.lang.Number;
rule "StopTextRule"
dialect "mvel"
salience 20
lock-on-active true
when
RoutingData( messageBody != null && (
(messageBody.trim().equalsIgnoreCase("stop") || messageBody.trim().equalsIgnoreCase("\"stop\"") || messageBody.trim().equalsIgnoreCase("stop.") || messageBody.trim().equalsIgnoreCase("\"stop.\""))
|| (messageBody.trim().equalsIgnoreCase("quit")|| messageBody.trim().equalsIgnoreCase("\"quit\"") || messageBody.trim().equalsIgnoreCase("quit.")|| messageBody.trim().equalsIgnoreCase("\"quit.\""))
|| (messageBody.trim().equalsIgnoreCase("cancel")|| messageBody.trim().equalsIgnoreCase("\"cancel\"") || messageBody.trim().equalsIgnoreCase("cancel.")|| messageBody.trim().equalsIgnoreCase("\"cancel.\""))
|| (messageBody.trim().equalsIgnoreCase("UNSUBSCRIBE")|| messageBody.trim().equalsIgnoreCase("\"UNSUBSCRIBE\"") || messageBody.trim().equalsIgnoreCase("UNSUBSCRIBE.")|| messageBody.trim().equalsIgnoreCase("\"UNSUBSCRIBE.\"")))
&& incomingMessageProtocol != null && incomingMessageProtocol.trim().equalsIgnoreCase("X"))
routingResp : RoutingRuleResponse( isStop == false )
then
modify( routingResp ) {
setIsStop( true )
}
end
答案 0 :(得分:1)
使用Drools 6.4.0进行编译。我认为您使用的是旧版本,其中Java表达式必须包含在eval
。
在任何情况下都可以更简单地重写这种模式:
rule x
when
X( messageBody != null &&
messageBody matches "\\s*(\"?)(?i:stop|quit|cancel|unsubscribe)\\.?\\1\\s*" &&
incomingMessageProtocol != null &&
incomingMessageProtocol matches "\\s*(?i:X)\\s*") )
then
// ...
end