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

cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git


The following commit(s) were added to refs/heads/master by this push:
     new 0817ae1  FELIX-6498 : Support servlet api 4.0
0817ae1 is described below

commit 0817ae11a5793d98800a179698b8a6f0538b8b62
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Tue Jan 4 09:54:12 2022 +0100

    FELIX-6498 : Support servlet api 4.0
---
 .../internal/registry/PathResolverFactory.java     |  8 ++--
 .../internal/registry/PathResolverFactoryTest.java | 52 +++++++++++++++++-----
 2 files changed, 45 insertions(+), 15 deletions(-)

diff --git 
a/http/base/src/main/java/org/apache/felix/http/base/internal/registry/PathResolverFactory.java
 
b/http/base/src/main/java/org/apache/felix/http/base/internal/registry/PathResolverFactory.java
index 94be252..d870f08 100644
--- 
a/http/base/src/main/java/org/apache/felix/http/base/internal/registry/PathResolverFactory.java
+++ 
b/http/base/src/main/java/org/apache/felix/http/base/internal/registry/PathResolverFactory.java
@@ -306,9 +306,8 @@ public abstract class PathResolverFactory {
                 pr.handler = this.getServletHandler();
 
                 pr.matchedPattern = this.getPattern();
-                pr.match = MappingMatch.EXACT;
-                final int pos = uri.lastIndexOf("/");
-                pr.matchValue = uri.substring(pos + 1, uri.length());
+                pr.match = MappingMatch.PATH;
+                pr.matchValue = uri.length() > 0 ? uri.substring(1) : "";
 
                 return pr;
             }
@@ -322,8 +321,7 @@ public abstract class PathResolverFactory {
 
                 pr.matchedPattern = this.getPattern();
                 pr.match = MappingMatch.PATH;
-                final int pos = uri.lastIndexOf("/");
-                pr.matchValue = uri.substring(pos + 1, uri.length());
+                pr.matchValue = uri.substring(this.prefix.length(), 
uri.length());
 
                 return pr;
             }
diff --git 
a/http/base/src/test/java/org/apache/felix/http/base/internal/registry/PathResolverFactoryTest.java
 
b/http/base/src/test/java/org/apache/felix/http/base/internal/registry/PathResolverFactoryTest.java
index 46dbe23..3eb447f 100644
--- 
a/http/base/src/test/java/org/apache/felix/http/base/internal/registry/PathResolverFactoryTest.java
+++ 
b/http/base/src/test/java/org/apache/felix/http/base/internal/registry/PathResolverFactoryTest.java
@@ -20,6 +20,8 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
+import javax.servlet.http.MappingMatch;
+
 import org.junit.Test;
 
 public class PathResolverFactoryTest {
@@ -27,7 +29,10 @@ public class PathResolverFactoryTest {
     private void assertResult(final PathResolver resolver,
             final String path,
             final String expectedServletPath,
-            final String expectedPathInfo)
+            final String expectedPathInfo,
+            final MappingMatch match,
+            final String matchPattern,
+            final String matchValue)
     {
         final PathResolution pr = resolver.resolve(path);
         assertNotNull(pr);
@@ -41,6 +46,9 @@ public class PathResolverFactoryTest {
         {
             assertEquals(expectedPathInfo, pr.pathInfo);
         }
+        assertEquals(match, pr.match);
+        assertEquals(matchPattern, pr.matchedPattern);
+        assertEquals(matchValue, pr.matchValue);
     }
 
     @Test public void testRootMatching()
@@ -48,8 +56,8 @@ public class PathResolverFactoryTest {
         final PathResolver pr = PathResolverFactory.createPatternMatcher(null, 
"");
         assertNotNull(pr);
 
-        assertResult(pr, "/", "", "/");
-        assertResult(pr, "", "", "/");
+        assertResult(pr, "/", "", "/", MappingMatch.CONTEXT_ROOT, "", "");
+        assertResult(pr, "", "", "/", MappingMatch.CONTEXT_ROOT, "", "");
 
         assertNull(pr.resolve("/foo"));
     }
@@ -59,20 +67,44 @@ public class PathResolverFactoryTest {
         final PathResolver pr = PathResolverFactory.createPatternMatcher(null, 
"/");
         assertNotNull(pr);
 
-        assertResult(pr, "/foo/bar", "/foo/bar", null);
-        assertResult(pr, "/foo", "/foo", null);
+        assertResult(pr, "/foo/bar", "/foo/bar", null, MappingMatch.DEFAULT, 
"/", "");
+        assertResult(pr, "/foo", "/foo", null, MappingMatch.DEFAULT, "/", "");
     }
 
-    @Test public void testPathMatcher()
+    @Test public void testPathMatcherRoot()
     {
         final PathResolver pr = PathResolverFactory.createPatternMatcher(null, 
"/*");
         assertNotNull(pr);
 
-        assertResult(pr, "/foo", "", "/foo");
-        assertResult(pr, "/foo/bar", "", "/foo/bar");
+        assertResult(pr, "/foo", "", "/foo", MappingMatch.PATH, "/*", "foo");
+        assertResult(pr, "/foo/bar", "", "/foo/bar", MappingMatch.PATH, "/*", 
"foo/bar");
+
+        assertResult(pr, "/", "", "/", MappingMatch.PATH, "/*", "");
+
+        assertResult(pr, "", "", null, MappingMatch.PATH, "/*", "");
+    }
+
+    @Test public void testPathMatcherSub()
+    {
+        final PathResolver pr = PathResolverFactory.createPatternMatcher(null, 
"/path/*");
+        assertNotNull(pr);
+
+        assertResult(pr, "/path/foo", "/path", "/foo", MappingMatch.PATH, 
"/path/*", "foo");
+    }
+
+    @Test public void testExactMatcher()
+    {
+        final PathResolver pr = PathResolverFactory.createPatternMatcher(null, 
"/MyServlet");
+        assertNotNull(pr);
 
-        assertResult(pr, "/", "", "/");
+        assertResult(pr, "/MyServlet", "/MyServlet", null, MappingMatch.EXACT, 
"/MyServlet", "MyServlet");
+    }
+
+    @Test public void testExtensionMatcher()
+    {
+        final PathResolver pr = PathResolverFactory.createPatternMatcher(null, 
"*.extension");
+        assertNotNull(pr);
 
-        assertResult(pr, "", "", null);
+        assertResult(pr, "/foo.extension", "/foo.extension", null, 
MappingMatch.EXTENSION, "*.extension", "foo");
     }
 }

Reply via email to