Merge pull request #1 from apache/master
Merge upstream
diff --git a/pom.xml b/pom.xml
index 81117a9..689a621 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,7 @@
</parent>
<artifactId>org.apache.sling.resourceresolver</artifactId>
- <version>1.6.9-SNAPSHOT</version>
+ <version>1.6.11-SNAPSHOT</version>
<name>Apache Sling Resource Resolver</name>
<description>
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 21ca9c9..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;
@@ -689,6 +690,10 @@
*/
public Resource resolveInternal(final String absPath, final Map<String, String> parameters) {
Resource resource = null;
+ if (absPath != null && !absPath.startsWith("/")) {
+ logger.debug("resolveInternal: absolute path expected {} ",absPath);
+ return resource; // resource is null at this point
+ }
String curPath = absPath;
try {
final ResourcePathIterator it = new ResourcePathIterator(absPath);
@@ -731,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();
@@ -767,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 be2dfd5..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.
@@ -553,6 +553,14 @@
path = resourceResolver.map("/content.html");
Assert.assertEquals("/content.html", path);
+ 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);
}