You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2014/11/24 11:04:55 UTC
svn commit: r1641346 - in /jackrabbit/oak/trunk/oak-jcr/src:
main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java
test/java/org/apache/jackrabbit/oak/jcr/RepositoryTest.java
Author: mduerig
Date: Mon Nov 24 10:04:55 2014
New Revision: 1641346
URL: http://svn.apache.org/r1641346
Log:
OAK-2238: Session.getItem violates JCR Spec
Applying patch. Credits to Will McGauley
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.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/delegate/SessionDelegate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java?rev=1641346&r1=1641345&r2=1641346&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/delegate/SessionDelegate.java Mon Nov 24 10:04:55 2014
@@ -426,12 +426,12 @@ public class SessionDelegate {
return getRootNode();
} else {
Tree parent = root.getTree(PathUtils.getParentPath(path));
- if (parent.hasProperty(name)) {
- return new PropertyDelegate(this, parent, name);
- }
+
Tree child = parent.getChild(name);
if (child.exists()) {
return new NodeDelegate(this, child);
+ } else if (parent.hasProperty(name)) {
+ return new PropertyDelegate(this, parent, name);
} else {
return null;
}
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=1641346&r1=1641345&r2=1641346&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 Mon Nov 24 10:04:55 2014
@@ -20,6 +20,7 @@ package org.apache.jackrabbit.oak.jcr;
import static java.util.Arrays.asList;
import static javax.jcr.ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW;
+import static javax.jcr.Repository.OPTION_NODE_AND_PROPERTY_WITH_SAME_NAME_SUPPORTED;
import static org.apache.jackrabbit.JcrConstants.JCR_UUID;
import static org.apache.jackrabbit.commons.JcrUtils.getChildNodes;
import static org.junit.Assert.assertEquals;
@@ -649,6 +650,29 @@ public class RepositoryTest extends Abst
}
@Test
+ public void testGetItemReturnsNodeBeforeProperty() throws RepositoryException {
+ String snnpSupported = getRepository().getDescriptor(OPTION_NODE_AND_PROPERTY_WITH_SAME_NAME_SUPPORTED);
+ assumeTrue(Boolean.valueOf(snnpSupported));
+
+ String newNodeName = "getItemTest";
+ String nodeAndPropertyName = "subnode";
+
+ Session session = getAdminSession();
+ Node root = session.getRootNode();
+ assertFalse(root.hasNode(newNodeName));
+ Node newNode = root.addNode(newNodeName, NodeTypeConstants.NT_OAK_UNSTRUCTURED);
+
+ newNode.setProperty(nodeAndPropertyName, "prop value");
+ newNode.addNode(nodeAndPropertyName);
+ session.save();
+
+ Item item = session.getItem("/" + newNodeName + "/" + nodeAndPropertyName);
+
+ assertTrue("should retrieve Node before property", item.isNode());
+ }
+
+
+ @Test
public void addMultiValuedString() throws RepositoryException {
Node parentNode = getNode(TEST_PATH);
Value[] values = new Value[2];