Merge branch 'master' into issues/SLING-8341
diff --git a/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java b/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
index f7d3554..229525a 100644
--- a/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
+++ b/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
@@ -30,6 +30,7 @@
import java.util.Set;
import java.util.StringTokenizer;
+import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.Nullable;
import javax.jcr.Session;
import javax.servlet.http.HttpServletRequest;
@@ -735,6 +736,9 @@
final StringBuilder resolutionPath = new StringBuilder();
final StringTokenizer tokener = new StringTokenizer(tokenizedPath, "/");
+ final int delimCount = StringUtils.countMatches(tokenizedPath,'/');
+ final int redundantDelimCount = delimCount - tokener.countTokens();
+
while (resource != null && tokener.hasMoreTokens()) {
final String childNameRaw = tokener.nextToken();
@@ -771,7 +775,7 @@
// uriPath = curPath + sling.resolutionPathInfo
if (resource != null) {
final String path = resolutionPath.toString();
- final String pathInfo = absPath.substring(path.length());
+ final String pathInfo = absPath.substring(path.length() + redundantDelimCount);
resource.getResourceMetadata().setResolutionPath(path);
resource.getResourceMetadata().setResolutionPathInfo(pathInfo);
diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java
index 3124dbb..953cd89 100644
--- a/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java
+++ b/src/test/java/org/apache/sling/resourceresolver/impl/MockedResourceResolverImplTest.java
@@ -150,7 +150,7 @@
activator.resourceProviderTracker = resourceProviderTracker;
activator.changeListenerWhiteboard = resourceChangeListenerWhiteboard;
activator.serviceUserMapper = Mockito.mock(ServiceUserMapper.class);
- handlers.add(createRPHandler(resourceProvider, "org.apache.sling.resourceresolver.impl.DummyTestProvider", 10L, "/single"));
+ handlers.add(createRPHandler(resourceProvider, "org.apache.sling.resourceresolver.impl.DummyTestProvider", 10L, "/"));
// setup mapping resources at /etc/map to exercise vanity etc.
// hmm, can't provide the resolver since its not up and ready.
@@ -555,6 +555,12 @@
path = resourceResolver.map(request,"some/relative/path/test");
Assert.assertEquals("some/relative/path/test", path);
+
+ buildResource("/", EMPTY_RESOURCE_LIST, resourceResolver, resourceProvider);
+ buildResource("/single", EMPTY_RESOURCE_LIST, resourceResolver, resourceProvider);
+ buildResource("/single/test", EMPTY_RESOURCE_LIST, resourceResolver, resourceProvider);
+ path = resourceResolver.map("/single//test.html");
+ Assert.assertEquals("/single/test.html", path);
}