Index: oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java	(revision 1433969)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java	(revision )
@@ -18,8 +18,8 @@
 
 import java.util.ArrayList;
 import java.util.List;
-
 import javax.annotation.Nonnull;
+import javax.jcr.RepositoryException;
 
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.namepath.JcrPathParser.Listener;
@@ -52,11 +52,21 @@
 
     //---------------------------------------------------------< NameMapper >---
     @Override
-    public String getOakName(String jcrName) {
-        return nameMapper.getOakName(jcrName);
+    public String getOakNameOrNull(String jcrName) {
+        return nameMapper.getOakNameOrNull(jcrName);
     }
 
+    @Nonnull
     @Override
+    public String getOakName(@Nonnull String jcrName) throws RepositoryException {
+        String oakName = getOakNameOrNull(jcrName);
+        if (oakName == null) {
+            throw new RepositoryException("Invalid jcr name " + jcrName);
+        }
+        return oakName;
+    }
+
+    @Override
     public String getJcrName(String oakName) {
         return nameMapper.getJcrName(oakName);
     }
@@ -210,7 +220,7 @@
                     error("index > 1");
                     return false;
                 }
-                String p = nameMapper.getOakName(name);
+                String p = nameMapper.getOakNameOrNull(name);
                 if (p == null) {
                     error("Invalid name: " + name);
                     return false;
Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java
===================================================================
--- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java	(revision 1433969)
+++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/SessionDelegate.java	(revision )
@@ -279,13 +279,8 @@
      */
     @Nonnull
     public String getOakNameOrThrow(String jcrName) throws RepositoryException {
-        String oakName = getNamePathMapper().getOakName(jcrName);
-        if (oakName != null) {
-            return oakName;
-        } else {
-            throw new RepositoryException("Invalid name: " + jcrName);
+        return getNamePathMapper().getOakName(jcrName);
-        }
+    }
-    }
 
     /**
      * Shortcut for {@code SessionDelegate.getNamePathMapper().getOakPath(jcrPath)}.
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java	(revision 1433969)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/ReadOnlyNodeTypeManager.java	(revision )
@@ -84,12 +84,8 @@
      */
     @Nonnull
     protected final String getOakName(String jcrName) throws RepositoryException {
-        String oakName = getNamePathMapper().getOakName(jcrName);
-        if (oakName == null) {
-            throw new RepositoryException("Invalid JCR name " + jcrName);
+        return getNamePathMapper().getOakName(jcrName);
-        }
+    }
-        return oakName;
-    }
 
     /**
      * @return  {@link org.apache.jackrabbit.oak.api.Tree} instance where the node types
Index: oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImplTest.java
===================================================================
--- oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImplTest.java	(revision 1433969)
+++ oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImplTest.java	(revision )
@@ -70,7 +70,7 @@
     @Test
     public void testEmptyName() {
         assertEquals("", npMapper.getJcrName(""));
-        assertEquals("", npMapper.getOakName(""));
+        assertEquals("", npMapper.getOakNameOrNull(""));
     }
 
     @Test
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeTemplateImpl.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeTemplateImpl.java	(revision 1433969)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeTemplateImpl.java	(revision )
@@ -164,7 +164,7 @@
     @Override
     public void setName(String name) throws ConstraintViolationException {
         JcrNameParser.checkName(name, false);
-        this.name = mapper.getJcrName(mapper.getOakName(name));
+        this.name = mapper.getJcrName(mapper.getOakNameOrNull(name));
     }
 
     @Override
@@ -219,7 +219,7 @@
         }
         else {
             JcrNameParser.checkName(name, false);
-            this.primaryItemName = mapper.getJcrName(mapper.getOakName(name));
+            this.primaryItemName = mapper.getJcrName(mapper.getOakNameOrNull(name));
         }
     }
 
@@ -237,7 +237,7 @@
         String[] n = new String[names.length];
         for (String name : names) {
             JcrNameParser.checkName(name, false);
-            n[k++] = mapper.getJcrName(mapper.getOakName(name));
+            n[k++] = mapper.getJcrName(mapper.getOakNameOrNull(name));
         }
         this.superTypeNames = n;
     }
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/LocalNameMapper.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/LocalNameMapper.java	(revision 1433969)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/LocalNameMapper.java	(revision )
@@ -79,7 +79,7 @@
     }
 
     @Override @CheckForNull
-    public String getOakName(String jcrName) {
+    public String getOakNameOrNull(String jcrName) {
         checkNotNull(jcrName);
 
         if (jcrName.startsWith("{")) {
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java	(revision 1433969)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeTypeImpl.java	(revision )
@@ -225,7 +225,7 @@
 
     @Override
     public boolean isNodeType(String nodeTypeName) {
-        String oakName = node.getNameMapper().getOakName(nodeTypeName);
+        String oakName = node.getNameMapper().getOakNameOrNull(nodeTypeName);
         return internalIsNodeType(oakName);
     }
 
@@ -499,8 +499,8 @@
     }
 
     private boolean matches(String childNodeName, String name) {
-        String oakChildName = node.getNameMapper().getOakName(childNodeName);
-        String oakName = node.getNameMapper().getOakName(name);
+        String oakChildName = node.getNameMapper().getOakNameOrNull(childNodeName);
+        String oakName = node.getNameMapper().getOakNameOrNull(name);
         // TODO need a better way to handle SNS
         return oakChildName != null && oakChildName.startsWith(oakName);
     }
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapper.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapper.java	(revision 1433969)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapper.java	(revision )
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.oak.namepath;
 
 import javax.annotation.Nonnull;
+import javax.jcr.RepositoryException;
 
 /**
  * The {@code NamePathMapper} interface combines {@code NameMapper} and
@@ -33,11 +34,17 @@
     public class Default implements NamePathMapper {
 
         @Override
-        public String getOakName(String jcrName) {
+        public String getOakNameOrNull(String jcrName) {
             return jcrName;
         }
 
+        @Nonnull
         @Override
+        public String getOakName(@Nonnull String jcrName) throws RepositoryException {
+            return jcrName;
+        }
+
+        @Override
         public boolean hasSessionLocalMappings() {
             return false;
         }
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java	(revision 1433969)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/value/ValueFactoryImpl.java	(revision )
@@ -200,7 +200,7 @@
                 case PropertyType.BOOLEAN:
                     return createValue(Conversions.convert(value).toBoolean());
                 case PropertyType.NAME:
-                    String oakName = namePathMapper.getOakName(value);
+                    String oakName = namePathMapper.getOakNameOrNull(value);
                     if (oakName == null) {
                         throw new ValueFormatException("Invalid name: " + value);
                     }
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeManagerImpl.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeManagerImpl.java	(revision 1433969)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeManagerImpl.java	(revision )
@@ -24,7 +24,6 @@
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import javax.jcr.InvalidItemStateException;
-import javax.jcr.NamespaceException;
 import javax.jcr.RepositoryException;
 import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.jcr.security.AccessControlException;
@@ -83,12 +82,7 @@
         if (privilegeName == null || privilegeName.isEmpty()) {
             throw new RepositoryException("Invalid privilege name " + privilegeName);
         }
-        String oakName = getOakName(privilegeName);
-        if (oakName == null) {
-            throw new NamespaceException("Invalid privilege name " + privilegeName);
-        }
-
-        PrivilegeDefinition definition = new PrivilegeDefinitionImpl(oakName, isAbstract, getOakNames(declaredAggregateNames));
+        PrivilegeDefinition definition = new PrivilegeDefinitionImpl(getOakName(privilegeName), isAbstract, getOakNames(declaredAggregateNames));
         PrivilegeDefinitionWriter writer = new PrivilegeDefinitionWriter(getWriteRoot());
         writer.writeDefinition(definition);
 
@@ -98,6 +92,7 @@
     }
 
     //------------------------------------------------------------< private >---
+    @Nonnull
     private Root getWriteRoot() throws UnsupportedRepositoryOperationException {
         if (root instanceof RootImpl) {
             return ((RootImpl) root).getLatest();
@@ -106,6 +101,7 @@
         }
     }
 
+    @Nonnull
     private Set<String> getOakNames(String[] jcrNames) throws RepositoryException {
         Set<String> oakNames;
         if (jcrNames == null || jcrNames.length == 0) {
@@ -114,22 +110,19 @@
             oakNames = new HashSet<String>(jcrNames.length);
             for (String jcrName : jcrNames) {
                 String oakName = getOakName(jcrName);
-                if (oakName == null) {
-                    throw new RepositoryException("Invalid name " + jcrName);
-                }
                 oakNames.add(oakName);
             }
         }
         return oakNames;
     }
 
-    @CheckForNull
-    String getOakName(String jcrName) {
+    @Nonnull
+    private String getOakName(String jcrName) throws RepositoryException {
         return namePathMapper.getOakName(jcrName);
     }
 
     @Nonnull
-    Privilege getPrivilege(PrivilegeDefinition definition) {
+    private Privilege getPrivilege(PrivilegeDefinition definition) {
         return new PrivilegeImpl(definition);
     }
 
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/PropertyDefinitionTemplateImpl.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/PropertyDefinitionTemplateImpl.java	(revision 1433969)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/PropertyDefinitionTemplateImpl.java	(revision )
@@ -68,7 +68,7 @@
     @Override
     public void setName(String name) throws ConstraintViolationException {
         JcrNameParser.checkName(name, true);
-        this.name = mapper.getJcrName(mapper.getOakName(name));
+        this.name = mapper.getJcrName(mapper.getOakNameOrNull(name));
     }
 
     @Override
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapper.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapper.java	(revision 1433969)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapper.java	(revision )
@@ -16,14 +16,14 @@
  */
 package org.apache.jackrabbit.oak.namepath;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
 import java.util.Map;
-
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
+import javax.jcr.RepositoryException;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+
 /**
  * Name mapper with no local prefix remappings. URI to prefix mappings
  * are read from the repository when for transforming expanded JCR names
@@ -50,7 +50,7 @@
     }
 
     @Override @CheckForNull
-    public String getOakName(@Nonnull String jcrName) {
+    public String getOakNameOrNull(@Nonnull String jcrName) {
         if (jcrName.startsWith("{")) {
             return getOakNameFromExpanded(jcrName);
         }
@@ -58,7 +58,17 @@
         return jcrName;
     }
 
+    @Nonnull
     @Override
+    public String getOakName(@Nonnull String jcrName) throws RepositoryException {
+        String oakName = getOakNameOrNull(jcrName);
+        if (oakName == null) {
+            throw new RepositoryException("Invalid jcr name " + jcrName);
+        }
+        return oakName;
+    }
+
+    @Override
     public boolean hasSessionLocalMappings() {
         return false;
     }
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java	(revision 1433969)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/util/NodeUtil.java	(revision )
@@ -308,7 +308,7 @@
 
     @Nonnull
     private String getOakName(String jcrName) {
-        String oakName = (jcrName == null) ? null : mapper.getOakName(jcrName);
+        String oakName = (jcrName == null) ? null : mapper.getOakNameOrNull(jcrName);
         if (oakName == null) {
             throw new IllegalArgumentException(new RepositoryException("Invalid name:" + jcrName));
         }
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeDefinitionTemplateImpl.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeDefinitionTemplateImpl.java	(revision 1433969)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/nodetype/NodeDefinitionTemplateImpl.java	(revision )
@@ -72,7 +72,7 @@
     @Override
     public void setName(String name) throws ConstraintViolationException {
         JcrNameParser.checkName(name, true);
-        this.name = mapper.getJcrName(mapper.getOakName(name));
+        this.name = mapper.getJcrName(mapper.getOakNameOrNull(name));
     }
 
     @Override
@@ -155,7 +155,7 @@
         }
         else {
             JcrNameParser.checkName(name, false);
-            this.defaultPrimaryTypeName = mapper.getJcrName(mapper.getOakName(name));
+            this.defaultPrimaryTypeName = mapper.getJcrName(mapper.getOakNameOrNull(name));
         }
     }
 
@@ -198,7 +198,7 @@
         String[] n = new String[names.length];
         for (String name : names) {
             JcrNameParser.checkName(name, false);
-            n[k++] = mapper.getJcrName(mapper.getOakName(name));
+            n[k++] = mapper.getJcrName(mapper.getOakNameOrNull(name));
         }
         this.requiredPrimaryTypeNames = n;
     }
@@ -207,11 +207,11 @@
     public void addRequiredPrimaryType(String name) throws ConstraintViolationException {
         JcrNameParser.checkName(name, false);
         if (requiredPrimaryTypeNames == null) {
-            requiredPrimaryTypeNames = new String[] { mapper.getJcrName(mapper.getOakName(name)) };
+            requiredPrimaryTypeNames = new String[] { mapper.getJcrName(mapper.getOakNameOrNull(name)) };
         } else {
             String[] names = new String[requiredPrimaryTypeNames.length + 1];
             System.arraycopy(requiredPrimaryTypeNames, 0, names, 0, requiredPrimaryTypeNames.length);
-            names[requiredPrimaryTypeNames.length] = mapper.getJcrName(mapper.getOakName(name));
+            names[requiredPrimaryTypeNames.length] = mapper.getJcrName(mapper.getOakNameOrNull(name));
             requiredPrimaryTypeNames = names;
         }
 
Index: oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapperTest.java
===================================================================
--- oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapperTest.java	(revision 1433969)
+++ oak-core/src/test/java/org/apache/jackrabbit/oak/namepath/GlobalNameMapperTest.java	(revision )
@@ -44,54 +44,54 @@
     @Test
     public void testEmptyName() {
         assertEquals("", mapper.getJcrName(""));
-        assertEquals("", mapper.getOakName(""));
+        assertEquals("", mapper.getOakNameOrNull(""));
     }
 
 
     @Test
     public void testSimpleNames() {
-        assertEquals("foo", mapper.getOakName("foo"));
+        assertEquals("foo", mapper.getOakNameOrNull("foo"));
         assertEquals("foo", mapper.getJcrName("foo"));
-        assertEquals("foo ", mapper.getOakName("foo "));
+        assertEquals("foo ", mapper.getOakNameOrNull("foo "));
         assertEquals("foo ", mapper.getJcrName("foo "));
-        assertEquals(" foo ", mapper.getOakName(" foo "));
+        assertEquals(" foo ", mapper.getOakNameOrNull(" foo "));
         assertEquals(" foo ", mapper.getJcrName(" foo "));
-        assertEquals("foo.bar", mapper.getOakName("foo.bar"));
+        assertEquals("foo.bar", mapper.getOakNameOrNull("foo.bar"));
         assertEquals("foo.bar", mapper.getJcrName("foo.bar"));
-        assertEquals(".", mapper.getOakName("."));
+        assertEquals(".", mapper.getOakNameOrNull("."));
         assertEquals(".", mapper.getJcrName("."));
-        assertEquals("..", mapper.getOakName(".."));
+        assertEquals("..", mapper.getOakNameOrNull(".."));
         assertEquals("..", mapper.getJcrName(".."));
-        assertEquals("/", mapper.getOakName("/"));
+        assertEquals("/", mapper.getOakNameOrNull("/"));
         assertEquals("/", mapper.getJcrName("/"));
-        assertEquals(" ", mapper.getOakName(" "));
+        assertEquals(" ", mapper.getOakNameOrNull(" "));
         assertEquals(" ", mapper.getJcrName(" "));
     }
 
     @Test
     public void testExpandedNames() {
-        assertEquals("foo", mapper.getOakName("{}foo"));
-        assertEquals("{foo", mapper.getOakName("{foo"));
-        assertEquals("{foo}", mapper.getOakName("{foo}"));
-        assertEquals("{0} foo", mapper.getOakName("{0} foo")); // OAK-509
-        assertEquals("{", mapper.getOakName("{"));
-        assertEquals("nt:base", mapper.getOakName("{http://www.jcp.org/jcr/nt/1.0}base"));
-        assertEquals("foo:bar", mapper.getOakName("{http://www.example.com/foo}bar"));
-        assertEquals("quu:bar", mapper.getOakName("{http://www.example.com/quu}bar"));
-        assertNull(mapper.getOakName("{http://www.example.com/bar}bar"));
+        assertEquals("foo", mapper.getOakNameOrNull("{}foo"));
+        assertEquals("{foo", mapper.getOakNameOrNull("{foo"));
+        assertEquals("{foo}", mapper.getOakNameOrNull("{foo}"));
+        assertEquals("{0} foo", mapper.getOakNameOrNull("{0} foo")); // OAK-509
+        assertEquals("{", mapper.getOakNameOrNull("{"));
+        assertEquals("nt:base", mapper.getOakNameOrNull("{http://www.jcp.org/jcr/nt/1.0}base"));
+        assertEquals("foo:bar", mapper.getOakNameOrNull("{http://www.example.com/foo}bar"));
+        assertEquals("quu:bar", mapper.getOakNameOrNull("{http://www.example.com/quu}bar"));
+        assertNull(mapper.getOakNameOrNull("{http://www.example.com/bar}bar"));
     }
 
     @Test
     public void testPrefixedNames() {
-        assertEquals("nt:base", mapper.getOakName("nt:base"));
+        assertEquals("nt:base", mapper.getOakNameOrNull("nt:base"));
         assertEquals("nt:base", mapper.getJcrName("nt:base"));
-        assertEquals("foo: bar", mapper.getOakName("foo: bar"));
+        assertEquals("foo: bar", mapper.getOakNameOrNull("foo: bar"));
         assertEquals("foo: bar", mapper.getJcrName("foo: bar"));
-        assertEquals("quu:bar ", mapper.getOakName("quu:bar "));
+        assertEquals("quu:bar ", mapper.getOakNameOrNull("quu:bar "));
         assertEquals("quu:bar ", mapper.getJcrName("quu:bar "));
 
         // unknown prefixes are only captured by the NameValidator
-        assertEquals("unknown:bar", mapper.getOakName("unknown:bar"));
+        assertEquals("unknown:bar", mapper.getOakNameOrNull("unknown:bar"));
         assertEquals("unknown:bar", mapper.getJcrName("unknown:bar"));
     }
 
Index: oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NameMapper.java
===================================================================
--- oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NameMapper.java	(revision 1433969)
+++ oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NameMapper.java	(revision )
@@ -18,6 +18,7 @@
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
+import javax.jcr.RepositoryException;
 
 /**
  * TODO document
@@ -33,9 +34,22 @@
      * @return Oak name, or {@code null}
      */
     @CheckForNull
-    String getOakName(@Nonnull String jcrName);
+    String getOakNameOrNull(@Nonnull String jcrName);
 
     /**
+     * Returns the Oak name for the specified JCR name. In contrast to
+     * {@link #getOakNameOrNull(String)} this method will throw a {@code RepositoryException}
+     * if the JCR name is invalid and cannot be resolved.
+     *
+     * @param jcrName The JCR name to be converted.
+     * @return A valid Oak name.
+     * @throws RepositoryException If the JCR name cannot be resolved.
+     */
+    @Nonnull
+    String getOakName(@Nonnull String jcrName) throws RepositoryException;
+
+
+    /**
      * Returns whether the mapper has prefix remappings; when there aren't
      * any, prefixed names do not need to be converted at all
      * 
