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
+ }
+ }
}
Show replies by date