Hi, all:<br> I meet a strange error when use "contains" operator on string type, My rule is like below:<br><blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">
package org.drools.examples;<br> <br>import org.drools.examples.HelloWorldExample.Message;<br><br>rule "check str contains"<br> dialect "java"<br> when<br> m:Message( <span style="color: rgb(255, 0, 0);">message</span> contains "Hello" )<br>
then<br> System.out.println( "===check str contains ok===" ); <br>end</blockquote><div>It throw below exception:<br><blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">
Exception in thread "main" java.lang.RuntimeException: <span style="color: rgb(255, 0, 0);">Operator 'Operator = 'contains'' does not exist for StringEvaluator</span><br> at org.drools.base.evaluators.StringFactory.getEvaluator(StringFactory.java:70)<br>
at org.drools.base.ValueType.getEvaluator(ValueType.java:166)<br> at org.drools.rule.builder.PatternBuilder.getEvaluator(PatternBuilder.java:900)<br> at org.drools.rule.builder.PatternBuilder.buildRestriction(PatternBuilder.java:714)<br>
at org.drools.rule.builder.PatternBuilder.buildRestriction(PatternBuilder.java:625)<br> at org.drools.rule.builder.PatternBuilder.createRestriction(PatternBuilder.java:434)<br> at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:308)<br>
at org.drools.rule.builder.PatternBuilder.buildConstraint(PatternBuilder.java:199)<br> at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:168)<br> at org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:93)<br>
at org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:69)<br> at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:53)<br> at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:446)<br>
at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:304)<br> at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:167)<br> at org.drools.examples.HelloWorldExample.main(HelloWorldExample.java:28)<br>
</blockquote>But if I use a "deep" str field, this issue does not exist, Everything goes well.<br>The drl is like below:<br><blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">
package org.drools.examples;<br> <br>import org.drools.examples.HelloWorldExample.Message;<br><br>rule "check deep str contains"<br> dialect "java"<br> when<br> m:Message( <span style="color: rgb(255, 0, 0);">sec.fir.msg</span> contains "Hello" )<br>
then<br> System.out.println( "===check deep str contains ok===" ); <br>end</blockquote><div>It seems a bug, but I am not sure. I attached my test code and the two drl files.<br>I use below jars to compile and run this test case:<br>
<blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">antlr-runtime-3.0.jar<br>core-3.2.3.v_686_R32x.jar<br>drools-compiler-4.0.7.jar<br>drools-core-4.0.7.jar<br>
drools-decisiontables-4.0.7.jar<br>drools-jsr94-4.0.7.jar<br>janino-2.5.10.jar<br>jsr94-1.1.jar<br>mvel-1.3.12-java1.4.2.jar</blockquote><p class="MyStyle" style="text-indent: 21pt;"><font size="2" color="#244bac" face="Verdana"><span style="font-size: 10pt;" lang="EN-US"></span></font></p>
Can everyone kindly give me any suggestion?<br><br>Thanks!<br>- Zeke<br></div></div>