Author: tripod
Date: Tue Nov 26 13:17:34 2013
New Revision: 1545647

URL: http://svn.apache.org/r1545647
Log:
OAK-1227 Node.hasNode("foo[2]") must not throw PathNotFoundException

Modified:
    
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
    
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java?rev=1545647&r1=1545646&r2=1545647&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
 Tue Nov 26 13:17:34 2013
@@ -797,24 +797,32 @@ public class NodeImpl<T extends NodeDele
 
     @Override
     public boolean hasNode(String relPath) throws RepositoryException {
-        final String oakPath = getOakPathOrThrow(relPath);
-        return perform(new NodeOperation<Boolean>(dlg) {
-            @Override
-            public Boolean perform() throws RepositoryException {
-                return node.getChild(oakPath) != null;
-            }
-        });
+        try {
+            final String oakPath = getOakPathOrThrow(relPath);
+            return perform(new NodeOperation<Boolean>(dlg) {
+                @Override
+                public Boolean perform() throws RepositoryException {
+                    return node.getChild(oakPath) != null;
+                }
+            });
+        } catch (PathNotFoundException e) {
+            return false;
+        }
     }
 
     @Override
     public boolean hasProperty(String relPath) throws RepositoryException {
-        final String oakPath = getOakPathOrThrow(relPath);
-        return perform(new NodeOperation<Boolean>(dlg) {
-            @Override
-            public Boolean perform() throws RepositoryException {
-                return node.getPropertyOrNull(oakPath) != null;
-            }
-        });
+        try {
+            final String oakPath = getOakPathOrThrow(relPath);
+            return perform(new NodeOperation<Boolean>(dlg) {
+                @Override
+                public Boolean perform() throws RepositoryException {
+                    return node.getPropertyOrNull(oakPath) != null;
+                }
+            });
+        } catch (PathNotFoundException e) {
+            return false;
+        }
     }
 
     @Override

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java?rev=1545647&r1=1545646&r2=1545647&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
 Tue Nov 26 13:17:34 2013
@@ -307,8 +307,12 @@ public class RepositoryTest extends Abst
         }
 
         assertTrue(getAdminSession().nodeExists("/foo[1]/bar[1]"));
+        assertTrue(node.hasNode("bar[1]"));
+        assertTrue(node.hasProperty("bar[1]/jcr:primaryType"));
         
assertTrue(getAdminSession().propertyExists("/foo[1]/bar[1]/jcr:primaryType"));
         assertFalse(getAdminSession().nodeExists("/foo[1]/bar[2]"));
+        assertFalse(node.hasNode("bar[2]"));
+        assertFalse(node.hasProperty("bar[2]/jcr:primaryType"));
         
assertFalse(getAdminSession().propertyExists("/foo[1]/bar[2]/jcr:primaryType"));
     }
 


Reply via email to