不匹配的输入'。'在规则中

时间:2017-06-05 09:52:56

标签: drools rule-engine kie

我是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

1 个答案:

答案 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