Hi,
We have some inconsistency with regards to resource paths and nonexisting 
resources in implementation and documentation.

For a request path 
"/some/nonexisting/resource.selector1.selector2.extension/suffix" the following 
is returned for SlingHttpServletRequest.getRequestPathInfo (in a Sling Servlet 
Filter with scope “REQUEST")

1) getResourcePath(): "/some/nonexisting/resource.selector.extension/suffix”
2) getExtension(): “extension”
3) getSelectorString(): “selector1.selector2”
4) getSuffix(): “/suffix”

SlingHttpServletRequest.getResource().getPath() returns 
"/some/nonexisting/resource.selector.extension/suffix” as well.
SlingHttpServletRequest.getResource().getResourceMetadata() returns 
"{sling.parameterMap={}, 
sling.resolutionPath=/some/nonexisting/resource.selector1.selector2.extension/suffix,
 sling.resolutionPathInfo=.selector1.selector2.extension/suffix}”
(Due to 
https://github.com/apache/sling-org-apache-sling-resourceresolver/blob/e7f0d0ad2c4a32e8603285f242920f4fb66aa38d/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java#L463-L479)
The resource metadata violates this contract: 

"The value of this property concatenated to the value of the {@link 
#RESOLUTION_PATH sling.resolutionPath} property returns the original request 
URI leading to the resource."
(https://github.com/apache/sling-org-apache-sling-api/blob/0f3a152fe9999fd276910c10d6a5ac39acf1f405/src/main/java/org/apache/sling/api/resource/ResourceMetadata.java#L60)

Also at 
https://sling.apache.org/documentation/the-sling-engine/url-decomposition.html 
we state

"Resource Path - For existing resources the resource path is the longest match 
(also considering its mappings) pointing to a resource where the next character 
is either a dot (.) or it is the full request URI. Otherwise (for a path not 
matching any existing resource) the resource path ends at the first dot (.) in 
the request url. The exact logic for retrieving the resource path is 
implemented at ResourceResolver.resolve(HttpServletRequest, String) called from 
org.apache.sling.engine.impl.request.RequestData.initResource() with the 2nd 
argument being the request path. “

What is wrong? Doc or Impl?
Thanks for any input.
Konrad

Reply via email to