Index: jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeHandlerTest.java =================================================================== --- jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeHandlerTest.java (revision 1099709) +++ jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeHandlerTest.java (working copy) @@ -28,11 +28,13 @@ import java.util.Map; import java.util.Set; -import junit.framework.TestCase; +import org.apache.commons.io.IOUtils; import org.apache.jackrabbit.spi.Name; import org.apache.jackrabbit.spi.NameFactory; import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl; +import junit.framework.TestCase; + /** * PrivilegeReadTest... */ @@ -40,16 +42,17 @@ private static final NameFactory NF = NameFactoryImpl.getInstance(); /* - - - - - - - - - - */ + + + + + + + + + + + */ private static final String TEST_PREFIX = "foo"; private static final String TEST_URI = "http://www.foo.com/1.0"; private static final String CONTENT_TYPE = "text/xml"; @@ -127,6 +130,10 @@ PrivilegeDefinitionReader pdr = new PrivilegeDefinitionReader(new StringReader(result), CONTENT_TYPE); PrivilegeDefinition[] definitions = pdr.getPrivilegeDefinitions(); assertTrue("Write", Arrays.equals(DEF_EXPECTED, definitions)); + + InputStream in = getClass().getResourceAsStream("writetest.xml"); + String expected = IOUtils.toString(in); + assertEquals("output", expected, result); } public void testWriteWriter() throws Exception { @@ -137,11 +144,15 @@ Writer w = new StringWriter(); writer.writeDefinitions(w, DEF_EXPECTED, namespaces); - String result = w.toString(); + String result = w.toString().trim(); PrivilegeDefinitionReader pdr = new PrivilegeDefinitionReader(new StringReader(result), CONTENT_TYPE); PrivilegeDefinition[] definitions = pdr.getPrivilegeDefinitions(); assertTrue("Write", Arrays.equals(DEF_EXPECTED, definitions)); + + InputStream in = getClass().getResourceAsStream("writetest.xml"); + String expected = IOUtils.toString(in); + assertEquals("output", expected, result); } } Index: jackrabbit-spi-commons/src/test/resources/org/apache/jackrabbit/spi/commons/privilege/writetest.xml =================================================================== --- jackrabbit-spi-commons/src/test/resources/org/apache/jackrabbit/spi/commons/privilege/writetest.xml (revision 1099709) +++ jackrabbit-spi-commons/src/test/resources/org/apache/jackrabbit/spi/commons/privilege/writetest.xml (working copy) @@ -16,12 +16,12 @@ limitations under the License. --> - - - - - - - - - + + + + + + + + + \ No newline at end of file Index: jackrabbit-spi-commons/src/test/resources/org/apache/jackrabbit/spi/commons/privilege/readtest.xml =================================================================== --- jackrabbit-spi-commons/src/test/resources/org/apache/jackrabbit/spi/commons/privilege/readtest.xml (revision 1099709) +++ jackrabbit-spi-commons/src/test/resources/org/apache/jackrabbit/spi/commons/privilege/readtest.xml (working copy) @@ -16,12 +16,12 @@ limitations under the License. --> - - - - - - - - + + + + + + + + Index: jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java =================================================================== --- jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java (revision 1099709) +++ jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java (working copy) @@ -164,9 +164,7 @@ throw new IllegalArgumentException("root element must be named 'privileges'"); } - updateNamespaceMapping(root, namespaces); - - NodeList nl = root.getElementsByTagName(XML_PRIVILEGE); + NodeList nl = root.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { Node n = nl.item(i); PrivilegeDefinition def = parseDefinition(n, namespaces); @@ -202,25 +200,31 @@ private void writeDefinitions(Result result, PrivilegeDefinition[] definitions, Map namespaces) throws IOException { try { Map uriToPrefix = new HashMap(namespaces.size()); + DocumentBuilder builder = createDocumentBuilder(); Document doc = builder.newDocument(); doc.appendChild(doc.createComment(LICENSE_HEADER)); Element privileges = (Element) doc.appendChild(doc.createElement(XML_PRIVILEGES)); + // define document wide namespaces for (String prefix : namespaces.keySet()) { String uri = namespaces.get(prefix); - privileges.setAttribute(ATTR_XMLNS + prefix, uri); + privileges.setAttributeNS("http://www.w3.org/2000/xmlns/", ATTR_XMLNS + prefix, uri); uriToPrefix.put(uri, prefix); } for (PrivilegeDefinition def : definitions) { - Element priv = (Element) privileges.appendChild(doc.createElement(XML_PRIVILEGE)); - priv.setAttribute(ATTR_NAME, getQualifiedName(def.getName(), uriToPrefix)); - priv.setAttribute(ATTR_ABSTRACT, Boolean.valueOf(def.isAbstract()).toString()); + Element priv = (Element) privileges.appendChild( + doc.createElementNS(def.getName().getNamespaceURI(), getQualifiedName(def.getName(), uriToPrefix)) + ); + if (def.isAbstract()) { + priv.setAttribute(ATTR_ABSTRACT, "true"); + } for (Name aggrName : def.getDeclaredAggregateNames()) { - Element contains = (Element) priv.appendChild(doc.createElement(XML_CONTAINS)); - contains.setAttribute(ATTR_NAME, getQualifiedName(aggrName, uriToPrefix)); + priv.appendChild( + doc.createElementNS(aggrName.getNamespaceURI(), getQualifiedName(aggrName, uriToPrefix)) + ); } } @@ -240,27 +244,21 @@ /** * Build a new PrivilegeDefinition from the given XML node. * @param n - * @param namespaces * @return */ private PrivilegeDefinition parseDefinition(Node n, Map namespaces) { - if (n.getNodeType() == Node.ELEMENT_NODE) { + if (isElement(n)) { Element elem = (Element) n; - updateNamespaceMapping(elem, namespaces); - - Name name = getName(elem.getAttribute(ATTR_NAME), namespaces); + Name name = getName(elem, namespaces); boolean isAbstract = Boolean.parseBoolean(elem.getAttribute(ATTR_ABSTRACT)); Set aggrNames = new HashSet(); - NodeList nodeList = elem.getChildNodes(); + NodeList nodeList = n.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Node contains = nodeList.item(i); - if (isElement(n) && XML_CONTAINS.equals(contains.getNodeName())) { - String aggrName = ((Element) contains).getAttribute(ATTR_NAME); - if (aggrName != null) { - aggrNames.add(getName(aggrName, namespaces)); - } + if (isElement(contains)) { + aggrNames.add(getName(contains, namespaces)); } } return new PrivilegeDefinition(name, isAbstract, aggrNames); @@ -311,10 +309,11 @@ return n.getNodeType() == Node.ELEMENT_NODE; } - private Name getName(String jcrName, Map namespaces) { - String prefix = Text.getNamespacePrefix(jcrName); - String uri = (Name.NS_EMPTY_PREFIX.equals(prefix)) ? Name.NS_DEFAULT_URI : namespaces.get(prefix); - return NAME_FACTORY.create(uri, Text.getLocalName(jcrName)); + private Name getName(Node n, Map namespaces) { + String prefix = Text.getNamespacePrefix(n.getNodeName()); + String uri = n.getNamespaceURI(); + namespaces.put(prefix, uri); + return NAME_FACTORY.create(uri, n.getLocalName()); } private String getQualifiedName(Name name, Map uriToPrefix) {