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 ju...@apache.org on 2012/05/09 15:20:21 UTC

svn commit: r1336183 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/ oak-jcr/src/main/java/org/apa...

Author: jukka
Date: Wed May  9 13:20:19 2012
New Revision: 1336183

URL: http://svn.apache.org/viewvc?rev=1336183&view=rev
Log:
OAK-89: Improve exception handling

Proper handling of null return values from getOakName()

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/AbstractNameMapper.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueFactoryImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/AbstractNameMapper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/AbstractNameMapper.java?rev=1336183&r1=1336182&r2=1336183&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/AbstractNameMapper.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/AbstractNameMapper.java Wed May  9 13:20:19 2012
@@ -57,7 +57,7 @@ public abstract class AbstractNameMapper
             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;
             }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java?rev=1336183&r1=1336182&r2=1336183&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/namepath/NamePathMapperImpl.java Wed May  9 13:20:19 2012
@@ -108,6 +108,9 @@ public class NamePathMapperImpl implemen
             @Override
             public void name(String name) {
                 String p = nameMapper.getOakName(name);
+                if (p == null) {
+                    error("Invalid name: " + name);
+                }
                 elements.add(p);
             }
         };

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java?rev=1336183&r1=1336182&r2=1336183&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java Wed May  9 13:20:19 2012
@@ -172,10 +172,6 @@ abstract class ItemImpl extends Abstract
         return sessionDelegate.getValueFactory();
     }
 
-    String toOakName(String jcrName) {
-        return sessionDelegate.getNamePathMapper().getOakName(jcrName);
-    }
-    
     String toOakPath(String jcrPath) throws RepositoryException {
         try {
             return sessionDelegate.getOakPath(jcrPath);
@@ -185,10 +181,6 @@ abstract class ItemImpl extends Abstract
         }
     }
 
-    String toJcrName(String oakName) {
-        return sessionDelegate.getNamePathMapper().getJcrName(oakName);
-    }
-
     String toJcrPath(String oakPath) {
         return sessionDelegate.getNamePathMapper().getJcrPath(oakPath);
     }

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java?rev=1336183&r1=1336182&r2=1336183&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java Wed May  9 13:20:19 2012
@@ -24,6 +24,8 @@ import org.apache.jackrabbit.oak.api.Tre
 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.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.util.Function1;
 import org.apache.jackrabbit.oak.util.Iterators;
 import org.apache.jackrabbit.oak.util.Predicate;
@@ -609,7 +611,12 @@ public class NodeImpl extends ItemImpl i
         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();

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java?rev=1336183&r1=1336182&r2=1336183&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java Wed May  9 13:20:19 2012
@@ -92,13 +92,15 @@ public class NodeTypeManagerImpl impleme
     @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);
         }

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueFactoryImpl.java?rev=1336183&r1=1336182&r2=1336183&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueFactoryImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/value/ValueFactoryImpl.java Wed May  9 13:20:19 2012
@@ -149,7 +149,11 @@ public class ValueFactoryImpl implements
         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);
                 cv = factory.createValue(oakPath, type);
@@ -164,7 +168,7 @@ public class ValueFactoryImpl implements
         } 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
+            // TODO: review exception handling in path 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