2017-06-05 108 views
0

我是新来的口水。我正在写一个新的rule.But我收到错误如下:“”不匹配的输入'。'在规则

不匹配的输入在模式规则 “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

流口水哪个版本您使用的? – laune

回答

0

这将编译使用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