[
http://jira.jboss.com/jira/browse/JBRULES-1278?page=comments#action_12400218 ]
M H commented on JBRULES-1278:
------------------------------
The good news is, i'm not able to reproduce the first part of the bug with drools
4.0.4
BUT i found some strange behaviour about the "\s" pattern (which is pattern
http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html for whitespaces as
says)
Following DSL:
[condition][]a TestItem=TestItem()
[condition][]- the field match {value}=title matches {value}
[condition][]- the field value {value}=eval(title.matches({value}))
Rules:
rule "TestRule"
salience 1
when
$item: a TestItem
then
System.out.println("show item in workspace: " + $item);
end
rule "TestRule 1"
salience 0
when
$item: a TestItem
- the field value "^Test\s+"
then
System.out.println("Rule 1 eval(title.matches(^Test\s+)): "
+ $item);
end
rule "TestRule 2"
salience 0
when
$item: a TestItem
- the field match "^Test\s+"
then
System.out.println("Rule 2 (title matches ^Test\s+): " +
$item);
end
rule "TestRule 3"
salience 0
when
$item: a TestItem
- the field match "^Test\s*"
then
System.out.println("Rule 3 (title matches ^Test\s*): " +
$item);
end
rule "TestRule 4"
salience 0
when
$item: a TestItem
- the field match "^Test\s+.*"
then
System.out.println("Rule 4 (title matches ^Test\s*.*): " +
$item);
end
rule "TestRule 5"
salience 0
when
$item: a TestItem
- the field value "^Test\s*"
then
System.out.println("Rule 5 eval(title.matches(^Test\s*)): "
+ $item);
end
rule "TestRule 6"
salience 0
when
$item: a TestItem
- the field value "^Test\s*"
then
System.out.println("Rule 6 eval(title.matches(^Test\s*): " +
$item);
end
Following result:
1. show item in workspace: _Test (Hallo Welt!)_
2. show item in workspace: _Test_
3. show item in workspace: _Hallo Welt!_
4. show item in workspace: _Test _
Rule 5 eval(title.matches(^Tests*)): _Test_
Rule 6 eval(title.matches(^Tests*): _Test_
Rule 3 (title matches ^Tests*): _Test_
in my point of view:
Item 1 should match Rule 4 (check: System.out.println("Test (Hallo
Welt!)".matches("^Test\\s+.*"));)
Item 2 should match Rule 3, 5 and 6 which is OK.
Item 3 should never match which is also OK
Item 4 should match Rule 1, Rule 2, Rule 3, Rule 4, Rule 5 and Rule 6 e.g.:
System.out.println("Test ".matches("^Test\\s*"));
So maybe i miss something very important, but currently after 10 hours work i am a bit
confused ...
what i can reproduce is
rule "TestRule 7"
salience 0
when
$item: a TestItem
- the field value "^Test\\s+"
then
System.out.println("Rule 1 eval(title.matches(^Test\\s+)): "
+ $item);
end
resolves in an error when compiling:
line 1:20 no viable alternative at character '\'
line 1:25 mismatched character '<EOF>' expecting '"'
org.drools.rule.InvalidRulePackage: Rule Compilation error : [Rule name=TestRule 1,
agendaGroup=MAIN, salience=0, no-loop=false]
com/sample/Rule_TestRule_1_0.java (8:333) : Invalid escape sequence (valid ones are \b
\t \n \f \r \" \' \\ )
the point is in pure Java code pattern i have to write
title.matches("^Test\\s*"), ( the problem is \\ instead of \) and eval should
direct to Java or not?
If i just use \s* the DRL Viewer shows s*, using \\s* it shows \s* which is right.
DSL Parser "eval"
-----------------
Key: JBRULES-1278
URL:
http://jira.jboss.com/jira/browse/JBRULES-1278
Project: JBoss Drools
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: Drl Parser/Builder
Affects Versions: 4.0.1
Reporter: M H
Assigned To: Edson Tirelli
Priority: Blocker
Fix For: 4.0.5
rule "PatternTest"
when
$pli:Item( title matches "^Test\s*")
then
#
end
this one compiles but on Runtime it ends in an Exception when title looks for example
like this "BlaBla (Test)".
as workaround i thought about using the next part, but
rule "PatternTest"
when
$pli:Item( eval(title.matches("^Test\s*")) )
then
#
end
it resolves into, also it shouldn't (because title.matches() is Java Code a
shouldn't be parsed by the DSL Parser itself):
SyntaxfehlerRule Compilation error : [Rule name=OnlineStreaming Start,
agendaGroup=MAIN, salience=100, no-loop=true]
com/p7s1/swi/phoenix/n24/Rule_OnlineStreaming_Start_0.java (19:923) :
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira