Class StylesheetHandler

  • All Implemented Interfaces:
    javax.xml.transform.sax.TemplatesHandler, NodeConsumer, PrefixResolver, org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler

    public class StylesheetHandler
    extends org.xml.sax.helpers.DefaultHandler
    implements javax.xml.transform.sax.TemplatesHandler, PrefixResolver, NodeConsumer
    Initializes and processes a stylesheet via SAX events. This class acts as essentially a state machine, maintaining a ContentHandler stack, and pushing appropriate content handlers as parse events occur.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static int STYPE_IMPORT
      If getStylesheetType returns this value, the current stylesheet is an imported stylesheet.
      static int STYPE_INCLUDE
      If getStylesheetType returns this value, the current stylesheet is an included stylesheet.
      static int STYPE_ROOT
      If getStylesheetType returns this value, the current stylesheet is a root stylesheet.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void characters​(char[] ch, int start, int length)
      Receive notification of character data inside an element.
      XPath createXPath​(java.lang.String str, ElemTemplateElement owningTemplate)
      Process an expression string into an XPath.
      void endDocument()
      Receive notification of the end of the document.
      void endElement​(java.lang.String uri, java.lang.String localName, java.lang.String rawName)
      Receive notification of the end of an element.
      void endPrefixMapping​(java.lang.String prefix)
      Receive notification of the end of a Namespace mapping.
      void error​(org.xml.sax.SAXParseException e)
      Receive notification of a recoverable XSLT processing error.
      void fatalError​(org.xml.sax.SAXParseException e)
      Report a fatal XSLT processing error.
      java.lang.String getBaseIdentifier()
      Return the base identifier.
      boolean getIncremental()  
      SAXSourceLocator getLocator()
      Get the current stylesheet Locator object.
      java.lang.String getNamespaceForPrefix​(java.lang.String prefix)
      Given a namespace, get the corrisponding prefix from the current namespace support context.
      java.lang.String getNamespaceForPrefix​(java.lang.String prefix, org.w3c.dom.Node context)
      Given a namespace, get the corrisponding prefix.
      boolean getOptimize()  
      org.w3c.dom.Node getOriginatingNode()
      Set the node that is originating the SAX event.
      XSLTSchema getSchema()
      Get the root of the XSLT Schema, which tells us how to transition content handlers, create elements, etc.
      boolean getSource_location()  
      TransformerFactoryImpl getStylesheetProcessor()
      Get the XSLT TransformerFactoryImpl for needed services.
      StylesheetRoot getStylesheetRoot()
      Return the stylesheet root that this handler is constructing.
      java.lang.String getSystemId()
      Get the base ID (URI or system ID) from where relative URLs will be resolved.
      javax.xml.transform.Templates getTemplates()
      When this object is used as a ContentHandler or ContentHandler, it will create a Templates object, which the caller can get once the SAX events have been completed.
      boolean handlesNullPrefixes()  
      void ignorableWhitespace​(char[] ch, int start, int length)
      Receive notification of ignorable whitespace in element content.
      boolean isStylesheetParsingComplete()
      Test whether the _last_ endDocument() has been processed.
      void notationDecl​(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
      Receive notification of a notation declaration.
      void processingInstruction​(java.lang.String target, java.lang.String data)
      Receive notification of a processing instruction.
      void pushStylesheet​(Stylesheet s)
      Push the current stylesheet being constructed.
      org.xml.sax.InputSource resolveEntity​(java.lang.String publicId, java.lang.String systemId)
      Resolve an external entity.
      void setDocumentLocator​(org.xml.sax.Locator locator)
      Receive a Locator object for document events.
      void setOriginatingNode​(org.w3c.dom.Node n)
      Set the node that is originating the SAX event.
      void setSystemId​(java.lang.String baseID)
      Set the base ID (URL or system ID) for the stylesheet created by this builder.
      void skippedEntity​(java.lang.String name)
      Receive notification of a skipped entity.
      void startDocument()
      Receive notification of the beginning of the document.
      void startElement​(java.lang.String uri, java.lang.String localName, java.lang.String rawName, org.xml.sax.Attributes attributes)
      Receive notification of the start of an element.
      void startPrefixMapping​(java.lang.String prefix, java.lang.String uri)
      Receive notification of the start of a Namespace mapping.
      void unparsedEntityDecl​(java.lang.String name, java.lang.String publicId, java.lang.String systemId, java.lang.String notationName)
      Receive notification of an unparsed entity declaration.
      void warn​(java.lang.String msg, java.lang.Object[] args)
      Warn the user of an problem.
      void warning​(org.xml.sax.SAXParseException e)
      Receive notification of a XSLT processing warning.
      • Methods inherited from class java.lang.Object

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

      • STYPE_ROOT

        public static final int STYPE_ROOT
        If getStylesheetType returns this value, the current stylesheet is a root stylesheet.
        See Also:
        Constant Field Values
      • STYPE_INCLUDE

        public static final int STYPE_INCLUDE
        If getStylesheetType returns this value, the current stylesheet is an included stylesheet.
        See Also:
        Constant Field Values
      • STYPE_IMPORT

        public static final int STYPE_IMPORT
        If getStylesheetType returns this value, the current stylesheet is an imported stylesheet.
        See Also:
        Constant Field Values
    • Constructor Detail

      • StylesheetHandler

        public StylesheetHandler​(TransformerFactoryImpl processor)
                          throws javax.xml.transform.TransformerConfigurationException
        Create a StylesheetHandler object, creating a root stylesheet as the target.
        Parameters:
        processor - non-null reference to the transformer factory that owns this handler.
        Throws:
        javax.xml.transform.TransformerConfigurationException - if a StylesheetRoot can not be constructed for some reason.
    • Method Detail

      • createXPath

        public XPath createXPath​(java.lang.String str,
                                 ElemTemplateElement owningTemplate)
                          throws javax.xml.transform.TransformerException
        Process an expression string into an XPath. Must be public for access by the AVT class.
        Parameters:
        str - A non-null reference to a valid or invalid XPath expression string.
        Returns:
        A non-null reference to an XPath object that represents the string argument.
        Throws:
        javax.xml.transform.TransformerException - if the expression can not be processed.
        See Also:
        Section 4 Expressions in XSLT Specification
      • getNamespaceForPrefix

        public java.lang.String getNamespaceForPrefix​(java.lang.String prefix)
        Given a namespace, get the corrisponding prefix from the current namespace support context.
        Specified by:
        getNamespaceForPrefix in interface PrefixResolver
        Parameters:
        prefix - The prefix to look up, which may be an empty string ("") for the default Namespace.
        Returns:
        The associated Namespace URI, or null if the prefix is undeclared in this context.
      • getNamespaceForPrefix

        public java.lang.String getNamespaceForPrefix​(java.lang.String prefix,
                                                      org.w3c.dom.Node context)
        Given a namespace, get the corrisponding prefix. This is here only to support the PrefixResolver interface, and will throw an error if invoked on this object.
        Specified by:
        getNamespaceForPrefix in interface PrefixResolver
        Parameters:
        prefix - The prefix to look up, which may be an empty string ("") for the default Namespace.
        context - The node context from which to look up the URI.
        Returns:
        The associated Namespace URI, or null if the prefix is undeclared in this context.
      • getTemplates

        public javax.xml.transform.Templates getTemplates()
        When this object is used as a ContentHandler or ContentHandler, it will create a Templates object, which the caller can get once the SAX events have been completed.
        Specified by:
        getTemplates in interface javax.xml.transform.sax.TemplatesHandler
        Returns:
        The stylesheet object that was created during the SAX event process, or null if no stylesheet has been created. Author Scott Boag
      • setSystemId

        public void setSystemId​(java.lang.String baseID)
        Set the base ID (URL or system ID) for the stylesheet created by this builder. This must be set in order to resolve relative URLs in the stylesheet.
        Specified by:
        setSystemId in interface javax.xml.transform.sax.TemplatesHandler
        Parameters:
        baseID - Base URL for this stylesheet.
      • getSystemId

        public java.lang.String getSystemId()
        Get the base ID (URI or system ID) from where relative URLs will be resolved.
        Specified by:
        getSystemId in interface javax.xml.transform.sax.TemplatesHandler
        Returns:
        The systemID that was set with setSystemId(java.lang.String).
      • resolveEntity

        public org.xml.sax.InputSource resolveEntity​(java.lang.String publicId,
                                                     java.lang.String systemId)
                                              throws org.xml.sax.SAXException
        Resolve an external entity.
        Specified by:
        resolveEntity in interface org.xml.sax.EntityResolver
        Overrides:
        resolveEntity in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        publicId - The public identifer, or null if none is available.
        systemId - The system identifier provided in the XML document.
        Returns:
        The new input source, or null to require the default behaviour.
        Throws:
        org.xml.sax.SAXException - if the entity can not be resolved.
      • notationDecl

        public void notationDecl​(java.lang.String name,
                                 java.lang.String publicId,
                                 java.lang.String systemId)
        Receive notification of a notation declaration.

        By default, do nothing. Application writers may override this method in a subclass if they wish to keep track of the notations declared in a document.

        Specified by:
        notationDecl in interface org.xml.sax.DTDHandler
        Overrides:
        notationDecl in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        name - The notation name.
        publicId - The notation public identifier, or null if not available.
        systemId - The notation system identifier.
        See Also:
        DTDHandler.notationDecl(java.lang.String, java.lang.String, java.lang.String)
      • unparsedEntityDecl

        public void unparsedEntityDecl​(java.lang.String name,
                                       java.lang.String publicId,
                                       java.lang.String systemId,
                                       java.lang.String notationName)
        Receive notification of an unparsed entity declaration.
        Specified by:
        unparsedEntityDecl in interface org.xml.sax.DTDHandler
        Overrides:
        unparsedEntityDecl in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        name - The entity name.
        publicId - The entity public identifier, or null if not available.
        systemId - The entity system identifier.
        notationName - The name of the associated notation.
        See Also:
        DTDHandler.unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
      • setDocumentLocator

        public void setDocumentLocator​(org.xml.sax.Locator locator)
        Receive a Locator object for document events. This is called by the parser to push a locator for the stylesheet being parsed. The stack needs to be popped after the stylesheet has been parsed. We pop in popStylesheet.
        Specified by:
        setDocumentLocator in interface org.xml.sax.ContentHandler
        Overrides:
        setDocumentLocator in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        locator - A locator for all SAX document events.
        See Also:
        ContentHandler.setDocumentLocator(org.xml.sax.Locator), Locator
      • startDocument

        public void startDocument()
                           throws org.xml.sax.SAXException
        Receive notification of the beginning of the document.
        Specified by:
        startDocument in interface org.xml.sax.ContentHandler
        Overrides:
        startDocument in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException - Any SAX exception, possibly wrapping another exception.
        See Also:
        ContentHandler.startDocument()
      • isStylesheetParsingComplete

        public boolean isStylesheetParsingComplete()
        Test whether the _last_ endDocument() has been processed. This is needed as guidance for stylesheet optimization and compilation engines, which generally don't want to start until all included and imported stylesheets have been fully parsed.
        Returns:
        true iff the complete stylesheet tree has been built.
      • endDocument

        public void endDocument()
                         throws org.xml.sax.SAXException
        Receive notification of the end of the document.
        Specified by:
        endDocument in interface org.xml.sax.ContentHandler
        Overrides:
        endDocument in class org.xml.sax.helpers.DefaultHandler
        Throws:
        org.xml.sax.SAXException - Any SAX exception, possibly wrapping another exception.
        See Also:
        ContentHandler.endDocument()
      • startPrefixMapping

        public void startPrefixMapping​(java.lang.String prefix,
                                       java.lang.String uri)
                                throws org.xml.sax.SAXException
        Receive notification of the start of a Namespace mapping.

        By default, do nothing. Application writers may override this method in a subclass to take specific actions at the start of each element (such as allocating a new tree node or writing output to a file).

        Specified by:
        startPrefixMapping in interface org.xml.sax.ContentHandler
        Overrides:
        startPrefixMapping in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        prefix - The Namespace prefix being declared.
        uri - The Namespace URI mapped to the prefix.
        Throws:
        org.xml.sax.SAXException - Any SAX exception, possibly wrapping another exception.
        See Also:
        ContentHandler.startPrefixMapping(java.lang.String, java.lang.String)
      • endPrefixMapping

        public void endPrefixMapping​(java.lang.String prefix)
                              throws org.xml.sax.SAXException
        Receive notification of the end of a Namespace mapping.

        By default, do nothing. Application writers may override this method in a subclass to take specific actions at the start of each element (such as allocating a new tree node or writing output to a file).

        Specified by:
        endPrefixMapping in interface org.xml.sax.ContentHandler
        Overrides:
        endPrefixMapping in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        prefix - The Namespace prefix being declared.
        Throws:
        org.xml.sax.SAXException - Any SAX exception, possibly wrapping another exception.
        See Also:
        ContentHandler.endPrefixMapping(java.lang.String)
      • startElement

        public void startElement​(java.lang.String uri,
                                 java.lang.String localName,
                                 java.lang.String rawName,
                                 org.xml.sax.Attributes attributes)
                          throws org.xml.sax.SAXException
        Receive notification of the start of an element.
        Specified by:
        startElement in interface org.xml.sax.ContentHandler
        Overrides:
        startElement in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        uri - The Namespace URI, or an empty string.
        localName - The local name (without prefix), or empty string if not namespace processing.
        rawName - The qualified name (with prefix).
        attributes - The specified or defaulted attributes.
        Throws:
        org.xml.sax.SAXException
      • endElement

        public void endElement​(java.lang.String uri,
                               java.lang.String localName,
                               java.lang.String rawName)
                        throws org.xml.sax.SAXException
        Receive notification of the end of an element.
        Specified by:
        endElement in interface org.xml.sax.ContentHandler
        Overrides:
        endElement in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        uri - The Namespace URI, or an empty string.
        localName - The local name (without prefix), or empty string if not namespace processing.
        rawName - The qualified name (with prefix).
        Throws:
        org.xml.sax.SAXException - Any SAX exception, possibly wrapping another exception.
        See Also:
        ContentHandler.endElement(java.lang.String, java.lang.String, java.lang.String)
      • characters

        public void characters​(char[] ch,
                               int start,
                               int length)
                        throws org.xml.sax.SAXException
        Receive notification of character data inside an element.
        Specified by:
        characters in interface org.xml.sax.ContentHandler
        Overrides:
        characters in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        ch - The characters.
        start - The start position in the character array.
        length - The number of characters to use from the character array.
        Throws:
        org.xml.sax.SAXException - Any SAX exception, possibly wrapping another exception.
        See Also:
        ContentHandler.characters(char[], int, int)
      • ignorableWhitespace

        public void ignorableWhitespace​(char[] ch,
                                        int start,
                                        int length)
                                 throws org.xml.sax.SAXException
        Receive notification of ignorable whitespace in element content.
        Specified by:
        ignorableWhitespace in interface org.xml.sax.ContentHandler
        Overrides:
        ignorableWhitespace in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        ch - The whitespace characters.
        start - The start position in the character array.
        length - The number of characters to use from the character array.
        Throws:
        org.xml.sax.SAXException - Any SAX exception, possibly wrapping another exception.
        See Also:
        ContentHandler.ignorableWhitespace(char[], int, int)
      • processingInstruction

        public void processingInstruction​(java.lang.String target,
                                          java.lang.String data)
                                   throws org.xml.sax.SAXException
        Receive notification of a processing instruction.

        The Parser will invoke this method once for each processing instruction found: note that processing instructions may occur before or after the main document element.

        A SAX parser should never report an XML declaration (XML 1.0, section 2.8) or a text declaration (XML 1.0, section 4.3.1) using this method.

        By default, do nothing. Application writers may override this method in a subclass to take specific actions for each processing instruction, such as setting status variables or invoking other methods.

        Specified by:
        processingInstruction in interface org.xml.sax.ContentHandler
        Overrides:
        processingInstruction in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        target - The processing instruction target.
        data - The processing instruction data, or null if none is supplied.
        Throws:
        org.xml.sax.SAXException - Any SAX exception, possibly wrapping another exception.
        See Also:
        ContentHandler.processingInstruction(java.lang.String, java.lang.String)
      • skippedEntity

        public void skippedEntity​(java.lang.String name)
                           throws org.xml.sax.SAXException
        Receive notification of a skipped entity.

        By default, do nothing. Application writers may override this method in a subclass to take specific actions for each processing instruction, such as setting status variables or invoking other methods.

        Specified by:
        skippedEntity in interface org.xml.sax.ContentHandler
        Overrides:
        skippedEntity in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        name - The name of the skipped entity.
        Throws:
        org.xml.sax.SAXException - Any SAX exception, possibly wrapping another exception.
        See Also:
        ContentHandler.processingInstruction(java.lang.String, java.lang.String)
      • warn

        public void warn​(java.lang.String msg,
                         java.lang.Object[] args)
                  throws org.xml.sax.SAXException
        Warn the user of an problem.
        Parameters:
        msg - An key into the XSLTErrorResources table, that is one of the WG_ prefixed definitions.
        args - An array of arguments for the given warning.
        Throws:
        org.xml.sax.SAXException - that wraps a TransformerException if the current ErrorListener.warning(javax.xml.transform.TransformerException) method chooses to flag this condition as an error.
      • warning

        public void warning​(org.xml.sax.SAXParseException e)
                     throws org.xml.sax.SAXException
        Receive notification of a XSLT processing warning.
        Specified by:
        warning in interface org.xml.sax.ErrorHandler
        Overrides:
        warning in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        e - The warning information encoded as an exception.
        Throws:
        org.xml.sax.SAXException - that wraps a TransformerException if the current ErrorListener.warning(javax.xml.transform.TransformerException) method chooses to flag this condition as an error.
      • error

        public void error​(org.xml.sax.SAXParseException e)
                   throws org.xml.sax.SAXException
        Receive notification of a recoverable XSLT processing error.
        Specified by:
        error in interface org.xml.sax.ErrorHandler
        Overrides:
        error in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        e - The error information encoded as an exception.
        Throws:
        org.xml.sax.SAXException - that wraps a TransformerException if the current ErrorListener.error(javax.xml.transform.TransformerException) method chooses to flag this condition as an error.
      • fatalError

        public void fatalError​(org.xml.sax.SAXParseException e)
                        throws org.xml.sax.SAXException
        Report a fatal XSLT processing error.
        Specified by:
        fatalError in interface org.xml.sax.ErrorHandler
        Overrides:
        fatalError in class org.xml.sax.helpers.DefaultHandler
        Parameters:
        e - The error information encoded as an exception.
        Throws:
        org.xml.sax.SAXException - that wraps a TransformerException if the current ErrorListener.fatalError(javax.xml.transform.TransformerException) method chooses to flag this condition as an error.
      • getStylesheetProcessor

        public TransformerFactoryImpl getStylesheetProcessor()
        Get the XSLT TransformerFactoryImpl for needed services. TODO: This method should be renamed.
        Returns:
        The TransformerFactoryImpl that owns this handler.
      • getStylesheetRoot

        public StylesheetRoot getStylesheetRoot()
        Return the stylesheet root that this handler is constructing.
        Returns:
        The root stylesheet of the stylesheets tree.
      • pushStylesheet

        public void pushStylesheet​(Stylesheet s)
        Push the current stylesheet being constructed. If no other stylesheets have been pushed onto the stack, assume the argument is a stylesheet root, and also set the stylesheet root member.
        Parameters:
        s - non-null reference to a stylesheet.
      • getSchema

        public XSLTSchema getSchema()
        Get the root of the XSLT Schema, which tells us how to transition content handlers, create elements, etc.
        Returns:
        The root XSLT Schema, which should never be null.
      • getBaseIdentifier

        public java.lang.String getBaseIdentifier()
        Return the base identifier.
        Specified by:
        getBaseIdentifier in interface PrefixResolver
        Returns:
        The base identifier of the current stylesheet.
      • getLocator

        public SAXSourceLocator getLocator()
        Get the current stylesheet Locator object.
        Returns:
        non-null reference to the current locator object.
      • setOriginatingNode

        public void setOriginatingNode​(org.w3c.dom.Node n)
        Set the node that is originating the SAX event.
        Specified by:
        setOriginatingNode in interface NodeConsumer
        Parameters:
        n - Reference to node that originated the current event.
        See Also:
        NodeConsumer
      • getOriginatingNode

        public org.w3c.dom.Node getOriginatingNode()
        Set the node that is originating the SAX event.
        Returns:
        Reference to node that originated the current event.
        See Also:
        NodeConsumer
      • getOptimize

        public boolean getOptimize()
        Returns:
        Optimization flag
      • getIncremental

        public boolean getIncremental()
        Returns:
        Incremental flag
      • getSource_location

        public boolean getSource_location()
        Returns:
        Source Location flag