[exo-jcr-commits] exo-jcr SVN: r4735 - in jcr/trunk/exo.jcr.component.core/src: test/java/org/exoplatform/services/jcr/api/nodetypes and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Aug 11 04:03:21 EDT 2011


Author: areshetnyak
Date: 2011-08-11 04:03:20 -0400 (Thu, 11 Aug 2011)
New Revision: 4735

Modified:
   jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
   jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/nodetypes/TestNodeDefinition.java
Log:
EXOJCR-1468 : Problem with NullPointerExceptin if default primary type not defined and no explicit primary type given to create a child node was fixed. Now, for this use case will be throw a ConstraintViolationException.

Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java	2011-08-10 14:46:39 UTC (rev 4734)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java	2011-08-11 08:03:20 UTC (rev 4735)
@@ -297,6 +297,14 @@
 
       if (nodeDef.getName().equals(name) || primaryTypeName.equals(Constants.JCR_ANY_NAME))
       {
+         if (nodeDef.getDefaultPrimaryType() == null)
+         {
+            throw new ConstraintViolationException("Can not define node type for " + name.getAsString()
+                     + ". No default primary type defined for child nodes in \""
+                     + nodeData().getPrimaryTypeName().getAsString()
+                     + "\" node type and no explicit primary type given to create a child node.");
+         }
+         
          primaryTypeName = nodeDef.getDefaultPrimaryType();
       }
       // try to make new node

Modified: jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/nodetypes/TestNodeDefinition.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/nodetypes/TestNodeDefinition.java	2011-08-10 14:46:39 UTC (rev 4734)
+++ jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/api/nodetypes/TestNodeDefinition.java	2011-08-11 08:03:20 UTC (rev 4735)
@@ -24,6 +24,7 @@
 
 import javax.jcr.Node;
 import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.ConstraintViolationException;
 import javax.jcr.version.Version;
 
 /**
@@ -111,4 +112,38 @@
          fail();
       }
    }
+
+   public void testNodeTypeNotDeterminedNtFolder() throws Exception
+   {
+      Node root = session.getRootNode();
+      Node folder = root.addNode("abc", "nt:folder");
+
+      try
+      {
+         folder.addNode("def");
+         fail("Should be throw ConstraintViolationException, because node type for node \"def\" "
+                  + "was not defined and default primary type for child nodes in \"nt:folder\" node type is not define.");
+      }
+      catch (ConstraintViolationException e)
+      {
+         // ok
+      }
+   }
+
+   public void testNodeTypeNotDeterminedNtFile2() throws Exception
+   {
+      Node root = session.getRootNode();
+      Node folder = root.addNode("abc", "nt:file");
+
+      try
+      {
+         folder.addNode("jcr:content");
+         fail("Should be throw ConstraintViolationException, because node type for node \"jcr:content\" "
+                  + "was not defined and default primary type for child nodes in \"nt:file\" node type is not define.");
+      }
+      catch (ConstraintViolationException e)
+      {
+         // ok
+      }
+   }
 }



More information about the exo-jcr-commits mailing list