Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java =================================================================== --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java (revision 1658355) +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java (working copy) @@ -877,10 +877,10 @@ @Override public NodeType[] perform() throws RepositoryException { Tree tree = node.getTree(); - Iterator mixinNames; + Iterator mixinNames = Iterators.emptyIterator(); if (tree.hasProperty(JcrConstants.JCR_MIXINTYPES)) { mixinNames = TreeUtil.getNames(tree, JcrConstants.JCR_MIXINTYPES).iterator(); - } else { + } else if (tree.getStatus() != Status.NEW) { // OAK-2441: for backwards compatibility with Jackrabbit 2.x try to // read the primary type from the underlying node state. mixinNames = TreeUtil.getNames( Index: oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java =================================================================== --- oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java (revision 1658355) +++ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java (working copy) @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.oak.jcr; +import java.util.Arrays; import java.util.Calendar; import java.util.TimeZone; @@ -26,6 +27,7 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.nodetype.ConstraintViolationException; +import javax.jcr.nodetype.NodeType; import org.junit.Test; @@ -41,6 +43,27 @@ } @Test + public void testMixins() throws Exception { + Session session = getAdminSession(); + String nodename = "mixintest"; + Node mixinTest = session.getRootNode().addNode(nodename, "nt:folder"); + NodeType[] types; + types = mixinTest.getMixinNodeTypes(); + assertEquals(Arrays.toString(types), 0, types.length); + mixinTest.addMixin("mix:versionable"); + types = mixinTest.getMixinNodeTypes(); + assertEquals(Arrays.toString(types), 1, types.length); + session.save(); + mixinTest = session.getRootNode().getNode(nodename); + mixinTest.remove(); + // session.save(); + mixinTest = session.getRootNode().addNode(nodename, "nt:folder"); + types = mixinTest.getMixinNodeTypes(); + System.err.println(Arrays.toString(types)); + assertEquals(Arrays.toString(types), 0, types.length); + } + + @Test public void testCRUD() throws RepositoryException { Session session = getAdminSession(); // Create