Class ResolvingXMLFilter

  • All Implemented Interfaces:
    org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler, org.xml.sax.XMLFilter, org.xml.sax.XMLReader
    Direct Known Subclasses:
    ResolvingXMLReader

    public class ResolvingXMLFilter
    extends org.xml.sax.helpers.XMLFilterImpl
    A SAX XMLFilter that performs catalog-based entity resolution.

    This class implements a SAX XMLFilter that performs entity resolution using the CatalogResolver. The actual, underlying parser is obtained from a SAXParserFactory.

    Version:
    1.0
    Author:
    Norman Walsh Norman.Walsh@Sun.COM
    See Also:
    CatalogResolver, XMLFilter
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static boolean suppressExplanation
      Suppress explanatory message?
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      Catalog getCatalog()
      Provide accessto the underlying Catalog.
      void notationDecl​(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
      SAX DTDHandler API.
      void parse​(java.lang.String systemId)
      SAX XMLReader API.
      void parse​(org.xml.sax.InputSource input)
      SAX XMLReader API.
      void processingInstruction​(java.lang.String target, java.lang.String pidata)
      SAX ContentHandler API.
      org.xml.sax.InputSource resolveEntity​(java.lang.String publicId, java.lang.String systemId)
      Implements the resolveEntity method for the SAX interface, using an underlying CatalogResolver to do the real work.
      void startElement​(java.lang.String uri, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes atts)
      SAX ContentHandler API.
      void unparsedEntityDecl​(java.lang.String name, java.lang.String publicId, java.lang.String systemId, java.lang.String notationName)
      SAX DTDHandler API.
      • Methods inherited from class org.xml.sax.helpers.XMLFilterImpl

        characters, endDocument, endElement, endPrefixMapping, error, fatalError, getContentHandler, getDTDHandler, getEntityResolver, getErrorHandler, getFeature, getParent, getProperty, ignorableWhitespace, setContentHandler, setDocumentLocator, setDTDHandler, setEntityResolver, setErrorHandler, setFeature, setParent, setProperty, skippedEntity, startDocument, startPrefixMapping, warning
      • Methods inherited from class java.lang.Object

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

      • suppressExplanation

        public static boolean suppressExplanation
        Suppress explanatory message?
        See Also:
        parse(InputSource)
    • Constructor Detail

      • ResolvingXMLFilter

        public ResolvingXMLFilter()
        Construct an empty XML Filter with no parent.
      • ResolvingXMLFilter

        public ResolvingXMLFilter​(org.xml.sax.XMLReader parent)
        Construct an XML filter with the specified parent.
      • ResolvingXMLFilter

        public ResolvingXMLFilter​(CatalogManager manager)
        Construct an XML filter with the specified parent.
      • ResolvingXMLFilter

        public ResolvingXMLFilter​(org.xml.sax.XMLReader parent,
                                  CatalogManager manager)
        Construct an XML filter with the specified parent.
    • Method Detail

      • getCatalog

        public Catalog getCatalog()
        Provide accessto the underlying Catalog.
      • parse

        public void parse​(org.xml.sax.InputSource input)
                   throws java.io.IOException,
                          org.xml.sax.SAXException
        SAX XMLReader API.

        Note that the JAXP 1.1ea2 parser crashes with an InternalError if it encounters a system identifier that appears to be a relative URI that begins with a slash. For example, the declaration:

         <!DOCTYPE book SYSTEM "/path/to/dtd/on/my/system/docbookx.dtd">
         

        would cause such an error. As a convenience, this method catches that error and prints an explanation. (Unfortunately, it's not possible to identify the particular system identifier that causes the problem.)

        The underlying error is forwarded after printing the explanatory message. The message is only every printed once and if suppressExplanation is set to false before parsing, it will never be printed.

        Specified by:
        parse in interface org.xml.sax.XMLReader
        Overrides:
        parse in class org.xml.sax.helpers.XMLFilterImpl
        Throws:
        java.io.IOException
        org.xml.sax.SAXException
      • parse

        public void parse​(java.lang.String systemId)
                   throws java.io.IOException,
                          org.xml.sax.SAXException
        SAX XMLReader API.
        Specified by:
        parse in interface org.xml.sax.XMLReader
        Overrides:
        parse in class org.xml.sax.helpers.XMLFilterImpl
        Throws:
        java.io.IOException
        org.xml.sax.SAXException
        See Also:
        parse(InputSource)
      • resolveEntity

        public org.xml.sax.InputSource resolveEntity​(java.lang.String publicId,
                                                     java.lang.String systemId)
        Implements the resolveEntity method for the SAX interface, using an underlying CatalogResolver to do the real work.
        Specified by:
        resolveEntity in interface org.xml.sax.EntityResolver
        Overrides:
        resolveEntity in class org.xml.sax.helpers.XMLFilterImpl
      • notationDecl

        public void notationDecl​(java.lang.String name,
                                 java.lang.String publicId,
                                 java.lang.String systemId)
                          throws org.xml.sax.SAXException
        SAX DTDHandler API.

        Captured here only to detect the end of the prolog so that we can ignore subsequent oasis-xml-catalog PIs. Otherwise the events are just passed through.

        Specified by:
        notationDecl in interface org.xml.sax.DTDHandler
        Overrides:
        notationDecl in class org.xml.sax.helpers.XMLFilterImpl
        Throws:
        org.xml.sax.SAXException
      • unparsedEntityDecl

        public void unparsedEntityDecl​(java.lang.String name,
                                       java.lang.String publicId,
                                       java.lang.String systemId,
                                       java.lang.String notationName)
                                throws org.xml.sax.SAXException
        SAX DTDHandler API.

        Captured here only to detect the end of the prolog so that we can ignore subsequent oasis-xml-catalog PIs. Otherwise the events are just passed through.

        Specified by:
        unparsedEntityDecl in interface org.xml.sax.DTDHandler
        Overrides:
        unparsedEntityDecl in class org.xml.sax.helpers.XMLFilterImpl
        Throws:
        org.xml.sax.SAXException
      • startElement

        public void startElement​(java.lang.String uri,
                                 java.lang.String localName,
                                 java.lang.String qName,
                                 org.xml.sax.Attributes atts)
                          throws org.xml.sax.SAXException
        SAX ContentHandler API.

        Captured here only to detect the end of the prolog so that we can ignore subsequent oasis-xml-catalog PIs. Otherwise the events are just passed through.

        Specified by:
        startElement in interface org.xml.sax.ContentHandler
        Overrides:
        startElement in class org.xml.sax.helpers.XMLFilterImpl
        Throws:
        org.xml.sax.SAXException
      • processingInstruction

        public void processingInstruction​(java.lang.String target,
                                          java.lang.String pidata)
                                   throws org.xml.sax.SAXException
        SAX ContentHandler API.

        Detect and use the oasis-xml-catalog PI if it occurs.

        Specified by:
        processingInstruction in interface org.xml.sax.ContentHandler
        Overrides:
        processingInstruction in class org.xml.sax.helpers.XMLFilterImpl
        Throws:
        org.xml.sax.SAXException