Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java (revision 1336088) +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/WorkspaceImpl.java (revision ) @@ -27,6 +27,7 @@ import org.xml.sax.InputSource; import javax.jcr.NamespaceRegistry; +import javax.jcr.PathNotFoundException; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; @@ -90,7 +91,9 @@ throw new UnsupportedRepositoryOperationException("Not implemented."); } - sessionDelegate.copy(sessionDelegate.getOakPath(srcAbsPath), sessionDelegate.getOakPath(destAbsPath)); + sessionDelegate.copy( + sessionDelegate.getOakPathOrThrow(srcAbsPath, new PathNotFoundException(srcAbsPath)), + sessionDelegate.getOakPathOrThrow(destAbsPath, new PathNotFoundException(srcAbsPath))); } @SuppressWarnings("deprecation") @@ -108,7 +111,10 @@ ensureSupportedOption(Repository.LEVEL_2_SUPPORTED); ensureIsAlive(); - sessionDelegate.move(sessionDelegate.getOakPath(srcAbsPath), sessionDelegate.getOakPath(destAbsPath), false); + sessionDelegate.move( + sessionDelegate.getOakPathOrThrow(srcAbsPath, new PathNotFoundException(srcAbsPath)), + sessionDelegate.getOakPathOrThrow(destAbsPath, new PathNotFoundException(destAbsPath)), + false); } @Override @@ -318,4 +324,4 @@ throw new UnsupportedRepositoryOperationException(option + " is not supported by this repository."); } } -} \ No newline at end of file +} Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueFactoryImpl.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueFactoryImpl.java (revision 1336088) +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueFactoryImpl.java (revision ) @@ -149,9 +149,16 @@ CoreValue cv; try { if (type == PropertyType.NAME) { - cv = factory.createValue(namePathMapper.getOakName(value), type); + String oakName = namePathMapper.getOakName(value); + if (oakName == null) { + throw new ValueFormatException("Invalid name: " + value); + } + cv = factory.createValue(oakName, type); } else if (type == PropertyType.PATH) { String oakPath = namePathMapper.getOakPath(value); + if (oakPath == null) { + throw new ValueFormatException("Invalid path: " + value); + } cv = factory.createValue(oakPath, type); } else if (type == PropertyType.DATE) { if (ISO8601.parse(value) == null) { @@ -162,13 +169,6 @@ cv = factory.createValue(value, type); } } catch (NumberFormatException e) { - throw new ValueFormatException("Invalid value " + value + " for type " + PropertyType.nameFromValue(type)); - } catch (IllegalArgumentException e) { - // TODO: review exception handling in path/name resolution again - throw new ValueFormatException("Invalid value " + value + " for type " + PropertyType.nameFromValue(type)); - } catch (Exception e) { - // TODO: review exception handling in path/name resolution again - // TODO: throws RuntimeException which is pretty ugly throw new ValueFormatException("Invalid value " + value + " for type " + PropertyType.nameFromValue(type)); } @@ -201,4 +201,4 @@ CoreValue cv = factory.createValue(value.getUUID(), weak ? PropertyType.WEAKREFERENCE : PropertyType.REFERENCE); return new ValueImpl(cv, namePathMapper); } -} \ No newline at end of file +} Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserManagerImpl.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserManagerImpl.java (revision 1336088) +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/security/user/UserManagerImpl.java (revision ) @@ -388,6 +388,7 @@ } private String getInternalPath(Node node) throws RepositoryException { - return sessionDelegate.getOakPath(node.getPath()); + return sessionDelegate.getOakPathOrThrow(node.getPath(), new RepositoryException()); } + } \ No newline at end of file Index: oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NameMapper.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NameMapper.java (revision 1336088) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NameMapper.java (revision ) @@ -18,9 +18,26 @@ public interface NameMapper { - // TODO consider error handling + /** + * Returns the Oak name for the given JCR name, or {@code null} if no + * such mapping exists because the given JCR name contains an unknown + * namespace URI or prefix, or is otherwise invalid. + * + * @param jcrName JCR name + * @return Oak name, or {@code null} + */ String getOakName(String jcrName); - // TODO consider error handling + /** + * Returns the JCR name for the given Oak name. The given name is + * expected to have come from a valid Oak repository that contains + * only valid names with proper namespace mappings. If that's not + * the case, either a programming error or a repository corruption + * has occurred and an appropriate unchecked exception gets thrown. + * + * @param oakName Oak name + * @return JCR name + */ String getJcrName(String oakName); + } Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java (revision 1336088) +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java (revision ) @@ -172,24 +172,7 @@ return sessionDelegate.getValueFactory(); } - String toOakName(String jcrName) { - return sessionDelegate.getNamePathMapper().getOakName(jcrName); - } - - String toOakPath(String jcrPath) throws RepositoryException { - try { - return sessionDelegate.getOakPath(jcrPath); - } catch (IllegalArgumentException ex) { - // TODO we shouldn't have to catch this one - throw new RepositoryException(ex); - } - } - - String toJcrName(String oakName) { - return sessionDelegate.getNamePathMapper().getJcrName(oakName); - } - String toJcrPath(String oakPath) { return sessionDelegate.getNamePathMapper().getJcrPath(oakPath); } -} \ No newline at end of file +} Index: oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/AbstractNameMapper.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/AbstractNameMapper.java (revision 1336088) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/AbstractNameMapper.java (revision ) @@ -57,7 +57,7 @@ String name = jcrName.substring(pos + 1); String oakPrefix = getOakPrefix(pref); if (oakPrefix == null) { - throw new IllegalArgumentException("prefix '" + pref + "' is not mapped" ); + return null; // not a mapped name } else { return oakPrefix + ':' + name; } Index: oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrNameParser.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrNameParser.java (revision 1336088) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrNameParser.java (revision ) @@ -52,9 +52,9 @@ * Informs this listener about the result of {@link JcrNameParser#parse(String, org.apache.jackrabbit.oak.namepath.JcrNameParser.Listener)} * * @param name The resulting name upon successful completion of - * {@link JcrNameParser#parse(String, org.apache.jackrabbit.oak.namepath.JcrNameParser.Listener)} + * {@link org.apache.jackrabbit.oak.namepath.JcrNameParser#parse(String, org.apache.jackrabbit.oak.namepath.JcrNameParser.Listener)} */ - void name(String name); + boolean name(String name); } /** Index: oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImplTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImplTest.java (revision 1336088) +++ oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImplTest.java (revision ) @@ -25,6 +25,8 @@ import java.util.UUID; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; public class NamePathMapperImplTest { @@ -35,7 +37,7 @@ @Test public void testValidIdentifierPath() { String idPath = '[' + UUID.randomUUID().toString()+ ']'; - npMapper.getOakPath(idPath); + assertNotNull(npMapper.getOakPath(idPath)); } @Test @@ -45,12 +47,7 @@ invalid.add('[' + UUID.randomUUID().toString()+ "]/a/b/c"); for (String jcrPath : invalid) { - try { - npMapper.getOakPath(jcrPath); - fail("Invalid identifier path"); - } catch (Exception e) { - // success - } + assertNull(npMapper.getOakPath(jcrPath)); } } @@ -124,4 +121,4 @@ } } -} \ No newline at end of file +} Index: oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrPathParser.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrPathParser.java (revision 1336088) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/JcrPathParser.java (revision ) @@ -35,13 +35,13 @@ private JcrPathParser() { } - + interface Listener extends JcrNameParser.Listener { - void root(); - void identifier(String identifier); - void current(); - void parent(); - void index(int index); + boolean root(); + boolean identifier(String identifier); + boolean current(); + boolean parent(); + boolean index(int index); } public static void parse(String jcrPath, Listener listener) { @@ -62,7 +62,9 @@ // check if absolute path int pos = 0; if (jcrPath.charAt(0) == '/') { - listener.root(); + if (!listener.root()) { + return; + } pos++; } @@ -113,7 +115,9 @@ } JcrNameParser.parse(name, listener); - listener.index(index); + if (!listener.index(index)) { + return; + } state = STATE_PREFIX_START; lastPos = pos; name = null; @@ -127,16 +131,22 @@ return; } String identifier = jcrPath.substring(lastPos, pos - 2); - listener.identifier(identifier); + if (!listener.identifier(identifier)) { + return; + } state = STATE_PREFIX_START; lastPos = pos; } } else if (state == STATE_DOT) { - listener.current(); + if (!listener.current()) { + return; + } lastPos = pos; state = STATE_PREFIX_START; } else if (state == STATE_DOTDOT) { - listener.parent(); + if (!listener.parent()) { + return; + } lastPos = pos; state = STATE_PREFIX_START; } else if (state != STATE_URI Index: oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/PathMapper.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/PathMapper.java (revision 1336088) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/PathMapper.java (revision ) @@ -21,8 +21,27 @@ */ public interface PathMapper { + /** + * Returns the Oak path for the given JCR path, or {@code null} if no + * such mapping exists because the given JCR path contains a name element + * with an unknown namespace URI or prefix, or is otherwise invalid. + * + * @param jcrPath JCR path + * @return Oak path, or {@code null} + */ String getOakPath(String jcrPath); + /** + * Returns the JCR path for the given Oak path. The given path is + * expected to have come from a valid Oak repository that contains + * only valid paths whose name elements only use proper namespace + * mappings. If that's not the case, either a programming error or + * a repository corruption has occurred and an appropriate unchecked + * exception gets thrown. + * + * @param oakPath Oak path + * @return JCR path + */ String getJcrPath(String oakPath); } Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java (revision 1336088) +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java (revision ) @@ -16,27 +16,6 @@ */ package org.apache.jackrabbit.oak.jcr.nodetype; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.jcr.RepositoryException; -import javax.jcr.UnsupportedRepositoryOperationException; -import javax.jcr.nodetype.NoSuchNodeTypeException; -import javax.jcr.nodetype.NodeDefinitionTemplate; -import javax.jcr.nodetype.NodeType; -import javax.jcr.nodetype.NodeTypeDefinition; -import javax.jcr.nodetype.NodeTypeIterator; -import javax.jcr.nodetype.NodeTypeManager; -import javax.jcr.nodetype.NodeTypeTemplate; -import javax.jcr.nodetype.PropertyDefinitionTemplate; - import org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader; import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory; import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory.AbstractNodeDefinitionBuilder; @@ -49,6 +28,26 @@ import org.apache.jackrabbit.oak.jcr.value.ValueFactoryImpl; import org.apache.jackrabbit.oak.namepath.NameMapper; +import javax.jcr.RepositoryException; +import javax.jcr.UnsupportedRepositoryOperationException; +import javax.jcr.nodetype.NoSuchNodeTypeException; +import javax.jcr.nodetype.NodeDefinitionTemplate; +import javax.jcr.nodetype.NodeType; +import javax.jcr.nodetype.NodeTypeDefinition; +import javax.jcr.nodetype.NodeTypeIterator; +import javax.jcr.nodetype.NodeTypeManager; +import javax.jcr.nodetype.NodeTypeTemplate; +import javax.jcr.nodetype.PropertyDefinitionTemplate; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + public class NodeTypeManagerImpl implements NodeTypeManager { private final ValueFactoryImpl vf; @@ -92,13 +91,15 @@ @Override public boolean hasNodeType(String name) throws RepositoryException { init(); - return typemap.containsKey(mapper.getOakName(name)); + String oakName = mapper.getOakName(name); // can be null, which is fine + return typemap.containsKey(oakName); } @Override public NodeType getNodeType(String name) throws RepositoryException { init(); - NodeType type = typemap.get(mapper.getOakName(name)); + String oakName = mapper.getOakName(name); // can be null, which is fine + NodeType type = typemap.get(oakName); if (type == null) { throw new NoSuchNodeTypeException("Unknown node type: " + name); } Index: oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java (revision 1336088) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java (revision ) @@ -53,6 +53,7 @@ @Override public String getOakPath(String jcrPath) { final List elements = new ArrayList(); + final StringBuilder parseErrors = new StringBuilder(); if ("/".equals(jcrPath)) { // avoid the need to special case the root path later on @@ -61,58 +62,74 @@ JcrPathParser.Listener listener = new JcrPathParser.Listener() { - // TODO: replace RuntimeException by something that oak-jcr can deal with (e.g. ValueFactory) - @Override - public void root() { + public boolean root() { if (!elements.isEmpty()) { - throw new RuntimeException("/ on non-empty path"); + parseErrors.append("/ on non-empty path"); + return false; } elements.add(""); + return true; } @Override - public void identifier(String identifier) { + public boolean identifier(String identifier) { if (!elements.isEmpty()) { - throw new RuntimeException("[identifier] on non-empty path"); + parseErrors.append("[identifier] on non-empty path"); + return false; } elements.add(identifier); // todo resolve identifier - // todo seal + // todo seal elements + return true; } @Override - public void current() { + public boolean current() { // nothing to do here + return true; } @Override - public void parent() { + public boolean parent() { if (elements.isEmpty()) { - throw new RuntimeException(".. of empty path"); + parseErrors.append(".. of empty path"); + return false; } elements.remove(elements.size() - 1); + return true; } @Override - public void index(int index) { + public boolean index(int index) { if (index > 1) { - throw new RuntimeException("index > 1"); + parseErrors.append("index > 1"); + return false; } + return true; } @Override public void error(String message) { - throw new RuntimeException(message); + parseErrors.append(message); } @Override - public void name(String name) { + public boolean name(String name) { String p = nameMapper.getOakName(name); + if (p == null) { + parseErrors.append("Invalid name: ").append(name); + return false; + } elements.add(p); + return true; } }; JcrPathParser.parse(jcrPath, listener); + if (parseErrors.length() != 0) { + log.debug("Could not parser path " + jcrPath + ": " + parseErrors.toString()); + return null; + } StringBuilder oakPath = new StringBuilder(); for (String element : elements) { @@ -143,51 +160,57 @@ JcrPathParser.Listener listener = new JcrPathParser.Listener() { @Override - public void root() { + public boolean root() { if (!elements.isEmpty()) { - throw new RuntimeException("/ on non-empty path"); + throw new IllegalArgumentException("/ on non-empty path"); } elements.add(""); + return true; } @Override - public void identifier(String identifier) { + public boolean identifier(String identifier) { if (!elements.isEmpty()) { - throw new RuntimeException("[identifier] on non-empty path"); + throw new IllegalArgumentException("[identifier] on non-empty path"); } elements.add(identifier); // todo resolve identifier - // todo seal + // todo seal elements + return true; } @Override - public void current() { + public boolean current() { // nothing to do here + return false; } @Override - public void parent() { + public boolean parent() { if (elements.isEmpty()) { - throw new RuntimeException(".. of empty path"); + throw new IllegalArgumentException(".. of empty path"); } elements.remove(elements.size() - 1); + return true; } @Override - public void index(int index) { + public boolean index(int index) { if (index > 1) { - throw new RuntimeException("index > 1"); + throw new IllegalArgumentException("index > 1"); } + return true; } @Override public void error(String message) { - throw new RuntimeException(message); + throw new IllegalArgumentException(message); } @Override - public void name(String name) { + public boolean name(String name) { String p = nameMapper.getJcrName(name); elements.add(p); + return true; } }; @@ -208,4 +231,4 @@ jcrPath.deleteCharAt(jcrPath.length() - 1); return jcrPath.toString(); } -} \ No newline at end of file +} Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java (revision 1336088) +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionImpl.java (revision ) @@ -26,6 +26,7 @@ import javax.jcr.Credentials; import javax.jcr.Node; +import javax.jcr.PathNotFoundException; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; @@ -120,7 +121,10 @@ @Override public void move(String srcAbsPath, String destAbsPath) throws RepositoryException { ensureIsAlive(); - dlg.move(dlg.getOakPath(srcAbsPath), dlg.getOakPath(destAbsPath), true); + dlg.move( + dlg.getOakPathOrThrow(srcAbsPath, new PathNotFoundException(srcAbsPath)), + dlg.getOakPathOrThrow(destAbsPath, new PathNotFoundException(destAbsPath)), + true); } @Override @@ -156,8 +160,9 @@ public ContentHandler getImportContentHandler(String parentAbsPath, int uuidBehavior) throws RepositoryException { ensureIsAlive(); - // TODO - String internalPath = dlg.getOakPath(parentAbsPath); + @SuppressWarnings("unused") + String oakPath = dlg.getOakPathOrThrow(parentAbsPath, new PathNotFoundException(parentAbsPath)); + throw new UnsupportedRepositoryOperationException("TODO: Session.getImportContentHandler"); } @@ -200,8 +205,12 @@ @Override public boolean hasPermission(String absPath, String actions) throws RepositoryException { ensureIsAlive(); - String internalPath = dlg.getOakPath(absPath); + String oakPath = dlg.getOakPathOrNull(absPath); + if (oakPath == null) { + return false; // TODO should we throw an exception here? + } + // TODO return false; } @@ -266,4 +275,5 @@ throw new RepositoryException("This session has been closed."); } } + } \ No newline at end of file Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java (revision 1336088) +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java (revision ) @@ -142,22 +142,18 @@ } } - /** - * Shortcut for {@code SessionDelegate.getNamePathMapper().getOakPath(jcrPath)}. - * - * @param jcrPath - * @return - * @throws RepositoryException - */ - public String getOakPath(String jcrPath) throws RepositoryException { - try { - return getNamePathMapper().getOakPath(jcrPath); - } catch (IllegalArgumentException ex) { - // TODO we shouldn't have to catch this one - throw new RepositoryException(ex); + public String getOakPathOrThrow(String jcrPath, T t) throws T { + String oakPath = getOakPathOrNull(jcrPath); + if (oakPath != null || t == null) { + return oakPath; + } else { + throw t; } } + public String getOakPathOrNull(String jcrPath) { + return getNamePathMapper().getOakPath(jcrPath); + } //----------------------------------------------------------< Workspace >--- public Workspace getWorkspace() { @@ -277,7 +273,7 @@ String ns = nsRegistry.getURI(oakPrefix); return session.getNamespacePrefix(ns); } catch (RepositoryException e) { - // TODO + log.debug("Could not get JCR prefix for OAK prefix " + oakPrefix); return null; } } @@ -288,7 +284,7 @@ String ns = getSession().getNamespaceURI(jcrPrefix); return nsRegistry.getPrefix(ns); } catch (RepositoryException e) { - // TODO + log.debug("Could not get OAK prefix for JCR prefix " + jcrPrefix); return null; } } @@ -298,7 +294,7 @@ try { return nsRegistry.getPrefix(uri); } catch (RepositoryException e) { - // TODO + log.debug("Could not get OAK prefix for URI " + uri); return null; } } Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>MacRoman =================================================================== --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java (revision 1336088) +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java (revision ) @@ -24,6 +24,7 @@ import org.apache.jackrabbit.oak.commons.PathUtils; import org.apache.jackrabbit.oak.jcr.util.LogUtil; import org.apache.jackrabbit.oak.jcr.value.ValueConverter; +import org.apache.jackrabbit.oak.namepath.NameMapper; import org.apache.jackrabbit.oak.util.Function1; import org.apache.jackrabbit.oak.util.Iterators; import org.apache.jackrabbit.oak.util.Predicate; @@ -148,7 +149,7 @@ public Node addNode(String relPath, String primaryNodeTypeName) throws RepositoryException { checkStatus(); - String oakPath = toOakPath(relPath); + String oakPath = sessionDelegate.getOakPathOrThrow(relPath, new RepositoryException()); String oakName = PathUtils.getName(oakPath); NodeDelegate parent = dlg.getChild(PathUtils.getParentPath(oakPath)); if (parent == null) { @@ -211,8 +212,9 @@ p.remove(); return p; } else { + String oakName = sessionDelegate.getOakPathOrThrow(jcrName, new RepositoryException()); CoreValue oakValue = ValueConverter.toCoreValue(targetValue, sessionDelegate); - return new PropertyImpl(dlg.setProperty(toOakPath(jcrName), oakValue)); + return new PropertyImpl(dlg.setProperty(oakName, oakValue)); } } @@ -241,8 +243,9 @@ p.remove(); return p; } else { + String oakName = sessionDelegate.getOakPathOrThrow(jcrName, new RepositoryException()); List oakValue = ValueConverter.toCoreValues(targetValues, sessionDelegate); - return new PropertyImpl(dlg.setProperty(toOakPath(jcrName), oakValue)); + return new PropertyImpl(dlg.setProperty(oakName, oakValue)); } } @@ -361,7 +364,8 @@ public Node getNode(String relPath) throws RepositoryException { checkStatus(); - NodeDelegate nd = dlg.getChild(toOakPath(relPath)); + String oakPath = sessionDelegate.getOakPathOrThrow(relPath, new PathNotFoundException(relPath)); + NodeDelegate nd = dlg.getChild(oakPath); if (nd == null) { throw new PathNotFoundException(relPath); } @@ -414,7 +418,8 @@ public Property getProperty(String relPath) throws RepositoryException { checkStatus(); - PropertyDelegate pd = dlg.getProperty(toOakPath(relPath)); + String oakPath = sessionDelegate.getOakPathOrThrow(relPath, new PathNotFoundException()); + PropertyDelegate pd = dlg.getProperty(oakPath); if (pd == null) { throw new PathNotFoundException(relPath + " not found on " + getPath()); } else { @@ -545,14 +550,16 @@ public boolean hasNode(String relPath) throws RepositoryException { checkStatus(); - return dlg.getChild(toOakPath(relPath)) != null; + String oakPath = sessionDelegate.getOakPathOrThrow(relPath, new RepositoryException()); + return oakPath != null && dlg.getChild(oakPath) != null; } @Override public boolean hasProperty(String relPath) throws RepositoryException { checkStatus(); - return dlg.getProperty(toOakPath(relPath)) != null; + String oakPath = sessionDelegate.getOakPathOrThrow(relPath, new RepositoryException()); + return oakPath != null && dlg.getProperty(oakPath) != null; } @Override @@ -609,7 +616,12 @@ checkStatus(); // TODO: might be expanded, need a better way for this - String jcrName = toJcrName(toOakName(nodeTypeName)); + NameMapper mapper = sessionDelegate.getNamePathMapper(); + String oakName = mapper.getOakName(nodeTypeName); + if (oakName == null) { + return false; // An unknown name can't belong to a valid type + } + String jcrName = mapper.getJcrName(oakName); // TODO: figure out the right place for this check NodeTypeManager ntm = sessionDelegate.getNodeTypeManager(); @@ -643,8 +655,10 @@ } // TODO: END + String jcrPrimaryType = + sessionDelegate.getOakPathOrThrow(Property.JCR_PRIMARY_TYPE, new RepositoryException()); CoreValue cv = ValueConverter.toCoreValue(nodeTypeName, PropertyType.NAME, sessionDelegate); - dlg.setProperty(toOakPath(Property.JCR_PRIMARY_TYPE), cv); + dlg.setProperty(jcrPrimaryType, cv); } @Override @@ -984,4 +998,4 @@ return getTargetType(values[0], type); } } -} \ No newline at end of file +}