You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2021/09/14 15:03:31 UTC

[cxf] branch 3.4.x-fixes updated: [CXF-8594]:Fix regular expression parameter with non-capturing group … (#847)

This is an automated email from the ASF dual-hosted git repository.

reta pushed a commit to branch 3.4.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/3.4.x-fixes by this push:
     new 352d8bf  [CXF-8594]:Fix regular expression parameter with non-capturing group … (#847)
352d8bf is described below

commit 352d8bf50c2d14ac2e5ee720ec97f95b151851e2
Author: jimma <em...@apache.org>
AuthorDate: Tue Sep 14 19:23:23 2021 +0800

    [CXF-8594]:Fix regular expression parameter with non-capturing group … (#847)
    
    * [CXF-8594]:Fix regular expression parameter with non-capturing group doesn't work
    
    * [CXF-8594]:Improve the fix to better check the non grouping expression
---
 .../src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java |  2 +-
 .../test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
index b0c0af2..5003d32 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/model/URITemplate.java
@@ -83,7 +83,7 @@ public final class URITemplate {
                     // however do not add them if they already exist since that will cause the Matcher
                     // to create extraneous values.  Parens identify a group so multiple parens would
                     // indicate multiple groups.
-                    if (pattern.startsWith("(") && pattern.endsWith(")")) {
+                    if (pattern.startsWith("(") && pattern.endsWith(")") && !pattern.startsWith("(?")) {
                         patternBuilder.append(pattern);
                     } else {
                         patternBuilder.append('(');
diff --git a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java
index c2ba414..fb8c2e5 100644
--- a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java
+++ b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/model/URITemplateTest.java
@@ -28,6 +28,7 @@ import javax.ws.rs.core.MultivaluedMap;
 import org.apache.cxf.jaxrs.impl.MetadataMap;
 import org.apache.cxf.jaxrs.model.URITemplate.CurlyBraceTokenizer;
 
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -789,4 +790,14 @@ public class URITemplateTest {
                 -Integer.signum(URITemplate.compareTemplates(t2, t1)));
     }
 
+    @Test
+    public void testNonCapturingGroup() {
+        MultivaluedMap<String, String> values = new MetadataMap<>();
+        URITemplate t1 = new URITemplate("/{name: (?:cxf|CXF)}");
+        assertTrue("should match '/cxf' url", t1.match("/cxf", values));
+        Assert.assertEquals("cxf", values.get("name").get(0));
+        URITemplate t2 = new URITemplate("/{project: (?>cxf|apache)}");
+        assertTrue("should match '/cxf' url", t2.match("/cxf", values));
+        Assert.assertEquals("cxf", values.get("project").get(0));
+    }
 }
\ No newline at end of file