Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java =================================================================== --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java (revision 1761303) +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java (working copy) @@ -1314,7 +1314,12 @@ new Function() { @Override public Node apply(NodeDelegate nodeDelegate) { - return new NodeImpl(nodeDelegate, sessionContext); + try { + return createNode(nodeDelegate, sessionContext); + } catch (RepositoryException e) { + LOG.warn("createNode() call failed, falling back to constructing child node object for {} directly.", nodeDelegate.getPath(), e); + return new NodeImpl(nodeDelegate, sessionContext); + } } })); } Index: oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionHistoryTest.java =================================================================== --- oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionHistoryTest.java (revision 1761303) +++ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionHistoryTest.java (working copy) @@ -17,6 +17,7 @@ package org.apache.jackrabbit.oak.jcr.version; import javax.jcr.Node; +import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.version.VersionHistory; @@ -123,4 +124,24 @@ assertTrue("Session.getNodeByUUID() did not return VersionHistory object for a nt:versionHistory node.", superuser.getNodeByUUID(uuid) instanceof VersionHistory); } + + public void testGetNodeByTraversal() throws RepositoryException { + Node n = testRootNode.addNode(nodeName1, testNodeType); + n.addMixin(mixVersionable); + superuser.save(); + VersionHistory history = versionManager.getVersionHistory(n.getPath()); + + NodeIterator siblings = history.getParent().getNodes(); + boolean found = false; + while (siblings.hasNext()) { + Node sibling = siblings.nextNode(); + if (history.getIdentifier().equals(sibling.getIdentifier())) { + found = true; + assertTrue("Child iterator did not return VersionHistory object for a nt:versionHistory node.", + sibling instanceof VersionHistory); + break; + } + } + assertTrue("Version history node could not be found by traversing from its parent.", found); + } } \ No newline at end of file Index: oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionTest.java =================================================================== --- oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionTest.java (revision 1761303) +++ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionTest.java (working copy) @@ -65,6 +65,27 @@ superuser.getNodeByUUID(uuid) instanceof Version); } + public void testGetNodeByTraversal() throws RepositoryException { + Node n = testRootNode.addNode(nodeName1, testNodeType); + n.addMixin(mixVersionable); + superuser.save(); + VersionManager vMgr = superuser.getWorkspace().getVersionManager(); + Version version = vMgr.getBaseVersion(n.getPath()); + + NodeIterator siblings = version.getParent().getNodes(); + boolean found = false; + while (siblings.hasNext()) { + Node sibling = siblings.nextNode(); + if (version.getIdentifier().equals(sibling.getIdentifier())) { + found = true; + assertTrue("Child iterator did not return Version object for a nt:version node.", + sibling instanceof Version); + break; + } + } + assertTrue("Version node could not be found by traversing from its parent.", found); + } + public void testVersionFromQuery() throws RepositoryException, NotExecutableException { Node n = testRootNode.addNode(nodeName1, testNodeType);