Class SerializingContentHandler

  • All Implemented Interfaces:
    org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler

    public class SerializingContentHandler
    extends DefaultContentHandler
    A ContentHandler that serializes SAX events to a given Result instance. The JAXP SAXTransformerFactory facility is used for the serialization.

    This class explicitly ensures that all namespace prefixes are also present as xmlns attributes in the serialized XML document. This avoids problems with Xalan's serialization behaviour which was (at least during JDK 1.4) to ignore namespaces if they were not present as xmlns attributes.

    NOTE: The code in this class was originally written for Apache Cocoon and is included with some modifications here in Apache Jackrabbit. See the org.apache.cocoon.serialization.AbstractTextSerializer class in the cocoon-pipeline-impl component for the original code.

    Since:
    Jackrabbit JCR Commons 1.5
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String ENCODING
      The character encoding used for serialization (UTF-8).
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void endDocument()
      void endElement​(java.lang.String eltUri, java.lang.String eltLocalName, java.lang.String eltQName)
      Receive notification of the end of an element.
      void endPrefixMapping​(java.lang.String prefix)
      End the scope of a prefix-URI mapping: remove entry from mapping tables.
      static org.xml.sax.helpers.DefaultHandler getSerializer​(java.io.OutputStream output)
      Creates a serializing content handler that writes to the given stream.
      static org.xml.sax.helpers.DefaultHandler getSerializer​(java.io.Writer writer)
      Creates a serializing content handler that writes to the given writer.
      static org.xml.sax.helpers.DefaultHandler getSerializer​(javax.xml.transform.Result result)
      Creates a serializing content handler that writes to the given result.
      void startDocument()
      void startElement​(java.lang.String eltUri, java.lang.String eltLocalName, java.lang.String eltQName, org.xml.sax.Attributes attrs)
      Ensure all namespace declarations are present as xmlns: attributes and add those needed before calling superclass.
      void startPrefixMapping​(java.lang.String prefix, java.lang.String uri)
      Track mappings to be able to add xmlns: attributes in startElement().
      • Methods inherited from class org.xml.sax.helpers.DefaultHandler

        error, fatalError, notationDecl, resolveEntity, unparsedEntityDecl, warning
      • Methods inherited from class java.lang.Object

        equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • ENCODING

        public static final java.lang.String ENCODING
        The character encoding used for serialization (UTF-8). The encoding is fixed to make the text/xml content type safer to use.
        See Also:
        JCR-1621, Constant Field Values
    • Method Detail

      • getSerializer

        public static org.xml.sax.helpers.DefaultHandler getSerializer​(java.io.OutputStream output)
                                                                throws org.xml.sax.SAXException
        Creates a serializing content handler that writes to the given stream.
        Parameters:
        output - serialization target
        Returns:
        serializing content handler
        Throws:
        org.xml.sax.SAXException - if the content handler could not be initialized
      • getSerializer

        public static org.xml.sax.helpers.DefaultHandler getSerializer​(java.io.Writer writer)
                                                                throws org.xml.sax.SAXException
        Creates a serializing content handler that writes to the given writer.
        Parameters:
        writer - serialization target
        Returns:
        serializing content handler
        Throws:
        org.xml.sax.SAXException - if the content handler could not be initialized
      • getSerializer

        public static org.xml.sax.helpers.DefaultHandler getSerializer​(javax.xml.transform.Result result)
                                                                throws org.xml.sax.SAXException
        Creates a serializing content handler that writes to the given result.
        Parameters:
        result - serialization target
        Returns:
        serializing content handler
        Throws:
        org.xml.sax.SAXException - if the content handler could not be initialized
      • startPrefixMapping

        public void startPrefixMapping​(java.lang.String prefix,
                                       java.lang.String uri)
                                throws org.xml.sax.SAXException
        Track mappings to be able to add xmlns: attributes in startElement().
        Specified by:
        startPrefixMapping in interface org.xml.sax.ContentHandler
        Overrides:
        startPrefixMapping in class DefaultContentHandler
        Parameters:
        prefix - passed through
        uri - passed through
        Throws:
        org.xml.sax.SAXException - if an error occurs
      • startElement

        public void startElement​(java.lang.String eltUri,
                                 java.lang.String eltLocalName,
                                 java.lang.String eltQName,
                                 org.xml.sax.Attributes attrs)
                          throws org.xml.sax.SAXException
        Ensure all namespace declarations are present as xmlns: attributes and add those needed before calling superclass. This is a workaround for a Xalan bug (at least in version 2.0.1) : org.apache.xalan.serialize.SerializerToXML ignores start/endPrefixMapping().
        Specified by:
        startElement in interface org.xml.sax.ContentHandler
        Overrides:
        startElement in class DefaultContentHandler
        Parameters:
        eltUri - passed through
        eltLocalName - passed through
        eltQName - passed through
        attrs - passed through
        Throws:
        org.xml.sax.SAXException - if an error occurs
      • endElement

        public void endElement​(java.lang.String eltUri,
                               java.lang.String eltLocalName,
                               java.lang.String eltQName)
                        throws org.xml.sax.SAXException
        Receive notification of the end of an element. Try to restore the element qName.
        Specified by:
        endElement in interface org.xml.sax.ContentHandler
        Overrides:
        endElement in class DefaultContentHandler
        Parameters:
        eltUri - passed through
        eltLocalName - passed through
        eltQName - passed through
        Throws:
        org.xml.sax.SAXException - if an error occurs
      • endPrefixMapping

        public void endPrefixMapping​(java.lang.String prefix)
                              throws org.xml.sax.SAXException
        End the scope of a prefix-URI mapping: remove entry from mapping tables.
        Specified by:
        endPrefixMapping in interface org.xml.sax.ContentHandler
        Overrides:
        endPrefixMapping in class DefaultContentHandler
        Parameters:
        prefix - passed through
        Throws:
        org.xml.sax.SAXException - if an error occurs