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

Carsten Ziegeler commented on JCR-4015:
---------------------------------------

If the full path already exists, the method currently first tries the parent 
node, however if that one is not readable, it goes up the hierarchy. So we need 
to check the full path first. Potential patch:

{code}
Index: src/main/java/org/apache/jackrabbit/commons/JcrUtils.java
===================================================================
--- src/main/java/org/apache/jackrabbit/commons/JcrUtils.java   (Revision 
1759610)
+++ src/main/java/org/apache/jackrabbit/commons/JcrUtils.java   (Arbeitskopie)
@@ -1451,6 +1451,9 @@
         } else if (!absolutePath.startsWith("/")) {
             throw new IllegalArgumentException("not an absolute path: " + 
absolutePath);
         } else {
+            if ( session.nodeExists(absolutePath) ) {
+                return session.getNode(absolutePath);
+            }
             // find deepest existing parent node
             String path = absolutePath;
             int currentIndex = path.lastIndexOf('/');
{code}

> CLONE - jackrabbit-jcr-commons JcrUtils.getOrCreateByPath fails if session is 
> not allowed to read root
> ------------------------------------------------------------------------------------------------------
>
>                 Key: JCR-4015
>                 URL: https://issues.apache.org/jira/browse/JCR-4015
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-jcr-commons
>    Affects Versions: 2.4.5, 2.6.5, 2.8.1, 2.10.3, 2.12.2
>            Reporter: Carsten Ziegeler
>            Assignee: Julian Reschke
>             Fix For: 2.13.4
>
>
> JcrUtils.getOrCreateByPath  starts to try to find the node from the root down 
> to the specified path, therefore if the current session has not access to 
> "/", it fails. JcrUtils.getOrCreateByPath must try the longest path first and 
> then reduce it until it finds an accessible node. So for example if the input 
> is "/a/b/c" instead of testing for "/", "/a", "/a/b" .. it should test 
> /a/b/c, /a/b, /a and then /



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

Reply via email to