Author: mcucchiara Date: Sat Jan 28 16:40:38 2012 New Revision: 1237092 URL: http://svn.apache.org/viewvc?rev=1237092&view=rev Log: WW-3747 - regular expressions in combination with advanced wildcards don't work
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/RegexPatternMatcher.java struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/RegexPatternMatcherTest.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/RegexPatternMatcher.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/RegexPatternMatcher.java?rev=1237092&r1=1237091&r2=1237092&view=diff ============================================================================== --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/RegexPatternMatcher.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/RegexPatternMatcher.java Sat Jan 28 16:40:38 2012 @@ -74,7 +74,7 @@ public class RegexPatternMatcher impleme //generate a new pattern used to match URIs //replace {X:B} by (B) - String newPattern = data.replaceAll("(\\{.*?:(.*?)\\})", "($2)"); + String newPattern = data.replaceAll("(\\{[^\\}]*?:(.*?)\\})", "($2)"); //replace {X} by (.*?) newPattern = newPattern.replaceAll("(\\{.*?\\})", "(.*?)"); Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/RegexPatternMatcherTest.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/RegexPatternMatcherTest.java?rev=1237092&r1=1237091&r2=1237092&view=diff ============================================================================== --- struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/RegexPatternMatcherTest.java (original) +++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/RegexPatternMatcherTest.java Sat Jan 28 16:40:38 2012 @@ -20,12 +20,12 @@ */ package org.apache.struts2.util; +import junit.framework.TestCase; + import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; -import junit.framework.TestCase; - public class RegexPatternMatcherTest extends TestCase { private RegexPatternMatcher matcher = new RegexPatternMatcher(); @@ -148,6 +148,38 @@ public class RegexPatternMatcherTest ext assertEquals("/some/val0/some/val1/buaaa", values.get("0")); } + /** + * See WW-3747 + */ + public void testWW_3747() { + RegexPatternMatcherExpression expr = matcher.compilePattern("/{type}/{author:.+}/list"); + + Map<String, String> values = new HashMap<String, String>(); + + assertTrue(matcher.match(values, "/philosophy/AynRand/list", expr)); + assertEquals(5, values.size()); + assertEquals("philosophy", values.get("type")); + assertEquals("AynRand", values.get("author")); + + assertEquals("/philosophy/AynRand/list", values.get("0")); + } + + /** + * See WW-3747 + */ + public void testWW_3747_2() { + RegexPatternMatcherExpression expr = matcher.compilePattern("/event/modify/{action}/{eventId:[0-9]+}"); + + Map<String, String> values = new HashMap<String, String>(); + + assertTrue(matcher.match(values, "/event/modify/delete/1234", expr)); + assertEquals(5, values.size()); + assertEquals("delete", values.get("action")); + assertEquals("1234", values.get("eventId")); + + assertEquals("/event/modify/delete/1234", values.get("0")); + } + public void testCompileBad0() { try { matcher.compilePattern("/{test/some");