You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2006/07/03 13:57:44 UTC

svn commit: r418750 - in /jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml: AbstractSAXEventGenerator.java DocViewSAXEventGenerator.java SysViewSAXEventGenerator.java

Author: jukka
Date: Mon Jul  3 04:57:40 2006
New Revision: 418750

URL: http://svn.apache.org/viewvc?rev=418750&view=rev
Log:
JCR-367: Explicit xmlns:prefix="namespace" attributes in XML exports.

Modified:
    jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/AbstractSAXEventGenerator.java
    jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/DocViewSAXEventGenerator.java
    jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/SysViewSAXEventGenerator.java

Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/AbstractSAXEventGenerator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/AbstractSAXEventGenerator.java?rev=418750&r1=418749&r2=418750&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/AbstractSAXEventGenerator.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/AbstractSAXEventGenerator.java Mon Jul  3 04:57:40 2006
@@ -24,6 +24,7 @@
 import org.slf4j.LoggerFactory;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
+import org.xml.sax.helpers.AttributesImpl;
 
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
@@ -189,6 +190,34 @@
                 continue;
             }
             contentHandler.endPrefixMapping(prefix);
+        }
+    }
+
+    /**
+     * Adds explicit <code>xmlns:prefix="uri"</code> attributes to the
+     * XML top-level element. The effect is the same as setting the
+     * "<code>http://xml.org/sax/features/namespace-prefixes</code>"
+     * property on an SAX parser.
+     *
+     * @param level level of the current XML element
+     * @param attributes attributes of the current XML element
+     * @throws RepositoryException on a repository error
+     */
+    protected void addNamespacePrefixes(int level, AttributesImpl attributes)
+            throws RepositoryException {
+        if (level == 0) {
+            String[] prefixes = session.getNamespacePrefixes();
+            for (int i = 0; i < prefixes.length; i++) {
+                if (prefixes[i].length() > 0
+                        && !QName.NS_XML_PREFIX.equals(prefixes[i])) {
+                    attributes.addAttribute(
+                            QName.NS_XMLNS_URI,
+                            prefixes[i],
+                            QName.NS_XMLNS_PREFIX + ":" + prefixes[i],
+                            "CDATA",
+                            session.getNamespaceURI(prefixes[i]));
+                }
+            }
         }
     }
 

Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/DocViewSAXEventGenerator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/DocViewSAXEventGenerator.java?rev=418750&r1=418749&r2=418750&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/DocViewSAXEventGenerator.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/DocViewSAXEventGenerator.java Mon Jul  3 04:57:40 2006
@@ -132,6 +132,7 @@
 
             // attributes (properties)
             AttributesImpl attrs = new AttributesImpl();
+            addNamespacePrefixes(level, attrs);
             Iterator iter = props.iterator();
             while (iter.hasNext()) {
                 Property prop = (Property) iter.next();
@@ -168,6 +169,7 @@
                             attrValue.toString());
                 }
             }
+
             // start element (node)
             QName qName = getQName(elemName);
             contentHandler.startElement(qName.getNamespaceURI(),

Modified: jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/SysViewSAXEventGenerator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/SysViewSAXEventGenerator.java?rev=418750&r1=418749&r2=418750&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/SysViewSAXEventGenerator.java (original)
+++ jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/xml/SysViewSAXEventGenerator.java Mon Jul  3 04:57:40 2006
@@ -86,6 +86,7 @@
     protected void entering(Node node, int level)
             throws RepositoryException, SAXException {
         AttributesImpl attrs = new AttributesImpl();
+        addNamespacePrefixes(level, attrs);
         // name attribute
         String nodeName;
         if (node.getDepth() == 0) {