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