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) {