[ 
https://issues.apache.org/jira/browse/SLING-5463?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15121773#comment-15121773
 ] 

Joel Richard commented on SLING-5463:
-------------------------------------

[~anchela], a while ago we had a short discussion about how I can ensure that 
Sling's createResource with the getItemOrNull optimisation keeps behaving like 
the previous implementation which was using itemExists and then getItem. The 
difficulty was that it catched all exceptions of the first itemExists call (and 
returned null in this case) and did therefore never call getItem with an 
invalid path. The idea to ensure the same behaviour was then to check manually 
whether the path is an absolute path:

{code}
Item item;
        // Check first if the path is absolute. If it isn't, then we return 
null because the previous itemExists method,
        // which was replaced by this method, would have returned null as well 
(instead of throwing an exception).
        if (path.isEmpty() || path.charAt(0) != '/') {
            item = null;
        }
        // Use fast getItemOrNull if session is a JackrabbitSession
        else if (session instanceof JackrabbitSession) {
            item = ((JackrabbitSession) session).getItemOrNull(path);
        }
       ...
{code}

Unfortunately, this does not seem to be good enough because 
org.apache.jackrabbit.oak.namepath.PathMapper#getOakPath performs additional 
validations.

Now, my question is whether there is a JCR or Jackrabbit API which allows me to 
perform the exact same validations but without triggering a session operation 
and best also without throwing an exception. Do you have an idea by chance?

> GetStarTest fails with "Invalid name or path"
> ---------------------------------------------
>
>                 Key: SLING-5463
>                 URL: https://issues.apache.org/jira/browse/SLING-5463
>             Project: Sling
>          Issue Type: Bug
>          Components: Testing
>            Reporter: Bertrand Delacretaz
>            Assignee: Robert Munteanu
>            Priority: Minor
>              Labels: sling-IT
>
> The GetStarTest from launchpad/integration-tests recently started failing, 
> for example at [1]:
> {code}
> javax.jcr.RepositoryException: Invalid name or path: 
> /GetStarTest1453972215267/* 
>  at 
> org.apache.jackrabbit.oak.jcr.session.SessionContext.getOakPathOrThrow(SessionContext.java:347)
> ...
>  at 
> org.apache.jackrabbit.oak.jcr.session.SessionImpl.getItemOrNull(SessionImpl.java:225)
>  at 
> org.apache.sling.jcr.resource.internal.helper.jcr.JcrItemResourceFactory.getItemOrNull(JcrItemResourceFactory.java:182)
>  at 
> org.apache.sling.jcr.resource.internal.helper.jcr.JcrItemResourceFactory.createResource(JcrItemResourceFactory.java:96)
>  at 
> org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider.listChildren(JcrResourceProvider.java:293)
>  at 
> org.apache.sling.resourceresolver.impl.providers.stateful.AuthenticatedResourceProvider.listChildren(AuthenticatedResourceProvider.java:175)
>  at 
> org.apache.sling.resourceresolver.impl.providers.stateful.CombinedResourceProvider.listChildren(CombinedResourceProvider.java:205)
>  at 
> org.apache.sling.resourceresolver.impl.ResourceResolverImpl.listChildren(ResourceResolverImpl.java:719)
>  at 
> org.apache.sling.api.resource.ResourceUtil.listChildren(ResourceUtil.java:360)
> ...
>  at 
> org.apache.sling.servlets.get.impl.helpers.JsonRendererServlet.doGet(JsonRendererServlet.java:100)
> {code}
> [1] 
> https://builds.apache.org/view/S-Z/view/Sling/job/sling-trunk-1.7/org.apache.sling$org.apache.sling.launchpad.testing/3252/testReport/junit/org.apache.sling.launchpad.webapp.integrationtest/GetStarTest/testGetStarJson/



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to