Index: src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefWriter.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefWriter.java (revision 643927) +++ src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefWriter.java (working copy) @@ -234,7 +234,14 @@ */ private void writePropDef(NodeTypeDef ntd, PropDef pd) throws IOException { out.write("\n" + INDENT + "- "); - writeItemDefName(pd.getName()); + + + Name name = pd.getName(); + if (name.equals(ItemDef.ANY_NAME)) { + out.write('*'); + } else { + writeItemDefName(name); + } out.write(" ("); out.write(PropertyType.nameFromValue(pd.getRequiredType()).toLowerCase()); out.write(")"); Index: src/test/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefTest.java (revision 643927) +++ src/test/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefTest.java (working copy) @@ -116,7 +116,6 @@ new CompactNodeTypeDefReader(reader, TEST_FILE); List ntdList = cndReader.getNodeTypeDefs(); NamespaceMapping nsm = cndReader.getNamespaceMapping(); - NamePathResolver resolver = new DefaultNamePathResolver(nsm); NodeTypeDef ntd = (NodeTypeDef)ntdList.get(0); // Test CND Reader by comparing imported NTD with model NTD. @@ -124,19 +123,42 @@ if (diff.isModified()){ fail("Imported node type definition is not identical to model definition"); } + } + public void testCompactNodeTypeDefs() throws Exception { + + // Read in node type def from test file + Reader reader = new InputStreamReader( + getClass().getClassLoader().getResourceAsStream(TEST_FILE)); + CompactNodeTypeDefReader cndReader = + new CompactNodeTypeDefReader(reader, TEST_FILE); + List ntdList1 = cndReader.getNodeTypeDefs(); + NamespaceMapping nsm = cndReader.getNamespaceMapping(); + NamePathResolver resolver = new DefaultNamePathResolver(nsm); + // Put imported node type def back into CND form with CND writer StringWriter sw = new StringWriter(); - CompactNodeTypeDefWriter.write(ntdList, nsm, resolver, sw); + CompactNodeTypeDefWriter.write(ntdList1, nsm, resolver, sw); // Rerun the reader on the product of the writer cndReader = new CompactNodeTypeDefReader(new StringReader(sw.toString()), TEST_FILE); - ntdList = cndReader.getNodeTypeDefs(); - ntd = (NodeTypeDef)ntdList.get(0); + List ntdList2 = cndReader.getNodeTypeDefs(); - diff = NodeTypeDefDiff.create(modelNodeTypeDef, ntd); - if (diff.isModified()){ + if (ntdList1.size() != ntdList2.size()) fail("Exported node type definition was not successfully read back in"); - } + else + for(int k = 0; k < ntdList1.size(); k++) { + NodeTypeDef ntd1 = (NodeTypeDef) ntdList1.get(k); + NodeTypeDef ntd2 = (NodeTypeDef) ntdList2.get(k); + + NodeTypeDefDiff diff = NodeTypeDefDiff.create(ntd1, ntd2); + if (diff.isModified() && !diff.isTrivial()){ + fail("Exported node type definition was not successfully read back in. " + + ntd2.getName() + "differs from original"); + } + } + + } + } Index: src/test/resources/cnd-reader-test-input.cnd =================================================================== --- src/test/resources/cnd-reader-test-input.cnd (revision 643927) +++ src/test/resources/cnd-reader-test-input.cnd (working copy) @@ -15,7 +15,24 @@ * limitations under the License. */ + + [ex:NodeType] > ex:ParentNodeType1, ex:ParentNodeType2 orderable mixin - ex:property (long) = '1', '2' primary mandatory autocreated protected multiple version < '[1,10]' + ex:node (ex:RequiredNodeType1, ex:RequiredNodeType2) = ex:RequiredNodeType1 mandatory autocreated protected multiple version + +[ex:AnotherNodeType] > ex:NodeType + - * (string) = 'a residual property' multiple + + * (ex:RequiredNodeType1) multiple + +[ex:Reference] + - ex:ref (reference) mandatory protected < 'ex:ref' + +[ex:Name] + - ex:name (name) < 'ex:name' + +[ex:Path] + - ex:path (path) < 'ex:a/ex:b' + +[ex:Empty] \ No newline at end of file