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");
}
}