Index: src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java (revision 418787) +++ src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeRegistry.java (working copy) @@ -1307,6 +1307,12 @@ // validate supertypes QName[] supertypes = ntd.getSupertypes(); + if ((supertypes == null || supertypes.length == 0) + && !ntd.isMixin() && !QName.NT_BASE.equals(ntd.getName())) { + log.info("Using nt:base as the default supertype: {}", ntd.getName()); + ntd.setSupertypes(new QName[] { QName.NT_BASE }); + supertypes = ntd.getSupertypes(); + } if (supertypes != null && supertypes.length > 0) { for (int i = 0; i < supertypes.length; i++) { checkNamespace(supertypes[i], nsReg); @@ -1368,14 +1374,6 @@ log.debug(msg); throw new InvalidNodeTypeDefException(msg, nsnte); } - } else { - // no supertypes specified: has to be either a mixin type or nt:base - if (!ntd.isMixin() && !QName.NT_BASE.equals(ntd.getName())) { - String msg = "[" + name - + "] all primary node types except nt:base itself must be (directly or indirectly) derived from nt:base"; - log.debug(msg); - throw new InvalidNodeTypeDefException(msg); - } } checkNamespace(ntd.getPrimaryItemName(), nsReg);