Save This Page
Home » Xerces-J-src.2.9.1 » sax » [javadoc | source]
    1   /*-- 
    2   
    3    Copyright (C) 2000 Brett McLaughlin & Jason Hunter.
    4    All rights reserved.
    5    
    6    Redistribution and use in source and binary forms, with or without
    7    modification, are permitted provided that the following conditions
    8    are met:
    9    
   10    1. Redistributions of source code must retain the above copyright
   11       notice, this list of conditions, and the following disclaimer.
   12    
   13    2. Redistributions in binary form must reproduce the above copyright
   14       notice, this list of conditions, and the disclaimer that follows 
   15       these conditions in the documentation and/or other materials 
   16       provided with the distribution.
   17   
   18    3. The name "JDOM" must not be used to endorse or promote products
   19       derived from this software without prior written permission.  For
   20       written permission, please contact license@jdom.org.
   21    
   22    4. Products derived from this software may not be called "JDOM", nor
   23       may "JDOM" appear in their name, without prior written permission
   24       from the JDOM Project Management (pm@jdom.org).
   25    
   26    In addition, we request (but do not require) that you include in the 
   27    end-user documentation provided with the redistribution and/or in the 
   28    software itself an acknowledgement equivalent to the following:
   29        "This product includes software developed by the
   30         JDOM Project (http://www.jdom.org/)."
   31    Alternatively, the acknowledgment may be graphical using the logos 
   32    available at http://www.jdom.org/images/logos.
   33   
   34    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   35    WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   36    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   37    DISCLAIMED.  IN NO EVENT SHALL THE JDOM AUTHORS OR THE PROJECT
   38    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   39    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   40    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   41    USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   42    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   43    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   44    OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   45    SUCH DAMAGE.
   46   
   47    This software consists of voluntary contributions made by many 
   48    individuals on behalf of the JDOM Project and was originally 
   49    created by Brett McLaughlin <brett@jdom.org> and 
   50    Jason Hunter <jhunter@jdom.org>.  For more information on the 
   51    JDOM Project, please see <http://www.jdom.org/>.
   52    
   53    */
   54   package sax;
   55   
   56   import java.io.IOException;
   57   
   58   import org.xml.sax.Attributes;
   59   import org.xml.sax.ContentHandler;
   60   import org.xml.sax.DTDHandler;
   61   import org.xml.sax.EntityResolver;
   62   import org.xml.sax.ErrorHandler;
   63   import org.xml.sax.InputSource;
   64   import org.xml.sax.Locator;
   65   import org.xml.sax.SAXException;
   66   import org.xml.sax.SAXParseException;
   67   import org.xml.sax.SAXNotSupportedException;
   68   import org.xml.sax.SAXNotRecognizedException;
   69   import org.xml.sax.XMLReader;
   70   import org.xml.sax.ext.LexicalHandler;
   71   import org.xml.sax.helpers.AttributesImpl;
   72   import org.xml.sax.helpers.DefaultHandler;
   73   
   74   
   75   /**
   76    * Base class for implementing an XML reader.
   77    *
   78    * Adapted from David Megginson's XMLFilterImpl and XMLFilterBase.
   79    */
   80   public abstract class XMLReaderBase extends DefaultHandler
   81   implements LexicalHandler, XMLReader
   82   {
   83       
   84       ////////////////////////////////////////////////////////////////////
   85       // Constructors.
   86       ////////////////////////////////////////////////////////////////////
   87       
   88       
   89       /**
   90        * Creates new XMLReaderBase.
   91        */
   92       public XMLReaderBase ()
   93       {
   94       }
   95       
   96       
   97       ////////////////////////////////////////////////////////////////////
   98       // Convenience methods.
   99       ////////////////////////////////////////////////////////////////////
  100   
  101   
  102       /**
  103        * Start a new element without a qname or attributes.
  104        *
  105        * <p>This method will provide a default empty attribute
  106        * list and an empty string for the qualified name. It invokes
  107        * {@link #startElement(String, String, String, Attributes)}
  108        * directly.</p>
  109        *
  110        * @param uri The element's Namespace URI.
  111        * @param localName The element's local name.
  112        * @exception org.xml.sax.SAXException If a filter
  113        *            further down the chain raises an exception.
  114        * @see org.xml.sax.ContentHandler#startElement
  115        */
  116       public void startElement (String uri, String localName)
  117       throws SAXException
  118       {
  119           startElement(uri, localName, "", EMPTY_ATTS);
  120       }
  121   
  122   
  123       /**
  124        * Start a new element without a Namespace URI or qname.
  125        *
  126        * <p>This method will provide an empty string for the
  127        * Namespace URI, and empty string for the qualified name.
  128        * It invokes
  129        * {@link #startElement(String, String, String, Attributes)}
  130        * directly.</p>
  131        *
  132        * @param localName The element's local name.
  133        * @param atts The element's attribute list.
  134        * @exception org.xml.sax.SAXException If a filter
  135        *            further down the chain raises an exception.
  136        * @see org.xml.sax.ContentHandler#startElement
  137        */
  138       public void startElement (String localName, Attributes atts)
  139       throws SAXException
  140       {
  141           startElement("", localName, "", atts);
  142       }
  143   
  144   
  145       /**
  146        * Start a new element without a Namespace URI, qname, or attributes.
  147        *
  148        * <p>This method will provide an empty string for the
  149        * Namespace URI, and empty string for the qualified name,
  150        * and a default empty attribute list. It invokes
  151        * {@link #startElement(String, String, String, Attributes)}
  152        * directly.</p>
  153        *
  154        * @param localName The element's local name.
  155        * @exception org.xml.sax.SAXException If a filter
  156        *            further down the chain raises an exception.
  157        * @see org.xml.sax.ContentHandler#startElement
  158        */
  159       public void startElement (String localName)
  160       throws SAXException
  161       {
  162           startElement("", localName, "", EMPTY_ATTS);
  163       }
  164   
  165   
  166       /**
  167        * End an element without a qname.
  168        *
  169        * <p>This method will supply an empty string for the qName.
  170        * It invokes {@link #endElement(String, String, String)}
  171        * directly.</p>
  172        *
  173        * @param uri The element's Namespace URI.
  174        * @param localName The element's local name.
  175        * @exception org.xml.sax.SAXException If a filter
  176        *            further down the chain raises an exception.
  177        * @see org.xml.sax.ContentHandler#endElement
  178        */
  179       public void endElement (String uri, String localName)
  180       throws SAXException
  181       {
  182           endElement(uri, localName, "");
  183       }
  184   
  185   
  186       /**
  187        * End an element without a Namespace URI or qname.
  188        *
  189        * <p>This method will supply an empty string for the qName
  190        * and an empty string for the Namespace URI.
  191        * It invokes {@link #endElement(String, String, String)}
  192        * directly.</p>
  193        *
  194        * @param localName The element's local name.
  195        * @exception org.xml.sax.SAXException If a filter
  196        *            further down the chain raises an exception.
  197        * @see org.xml.sax.ContentHandler#endElement
  198        */
  199       public void endElement (String localName)
  200       throws SAXException
  201       {
  202           endElement("", localName, "");
  203       }
  204   
  205   
  206       /**
  207        * Add an empty element.
  208        *
  209        * Both a {@link #startElement startElement} and an
  210        * {@link #endElement endElement} event will be passed on down
  211        * the filter chain.
  212        *
  213        * @param uri The element's Namespace URI, or the empty string
  214        *        if the element has no Namespace or if Namespace
  215        *        processing is not being performed.
  216        * @param localName The element's local name (without prefix).  This
  217        *        parameter must be provided.
  218        * @param qName The element's qualified name (with prefix), or
  219        *        the empty string if none is available.  This parameter
  220        *        is strictly advisory: the writer may or may not use
  221        *        the prefix attached.
  222        * @param atts The element's attribute list.
  223        * @exception org.xml.sax.SAXException If a filter
  224        *            further down the chain raises an exception.
  225        * @see org.xml.sax.ContentHandler#startElement
  226        * @see org.xml.sax.ContentHandler#endElement
  227        */
  228       public void emptyElement (String uri, String localName,
  229       String qName, Attributes atts)
  230       throws SAXException
  231       {
  232           startElement(uri, localName, qName, atts);
  233           endElement(uri, localName, qName);
  234       }
  235   
  236   
  237        /**
  238         * Add an empty element without a qname or attributes.
  239         *
  240         * <p>This method will supply an empty string for the qname
  241         * and an empty attribute list.  It invokes
  242         * {@link #emptyElement(String, String, String, Attributes)}
  243         * directly.</p>
  244         *
  245         * @param uri The element's Namespace URI.
  246         * @param localName The element's local name.
  247         * @exception org.xml.sax.SAXException If a filter
  248         *            further down the chain raises an exception.
  249         * @see #emptyElement(String, String, String, Attributes)
  250         */
  251       public void emptyElement (String uri, String localName)
  252       throws SAXException
  253       {
  254           emptyElement(uri, localName, "", EMPTY_ATTS);
  255       }
  256       
  257       
  258       /**
  259        * Add an empty element without a Namespace URI or qname.
  260        *
  261        * <p>This method will provide an empty string for the
  262        * Namespace URI, and empty string for the qualified name.
  263        * It invokes
  264        * {@link #emptyElement(String, String, String, Attributes)}
  265        * directly.</p>
  266        *
  267        * @param localName The element's local name.
  268        * @param atts The element's attribute list.
  269        * @exception org.xml.sax.SAXException If a filter
  270        *            further down the chain raises an exception.
  271        * @see org.xml.sax.ContentHandler#startElement
  272        */
  273       public void emptyElement (String localName, Attributes atts)
  274       throws SAXException
  275       {
  276           emptyElement("", localName, "", atts);
  277       }
  278   
  279   
  280       /**
  281        * Add an empty element without a Namespace URI, qname or attributes.
  282        *
  283        * <p>This method will supply an empty string for the qname,
  284        * and empty string for the Namespace URI, and an empty
  285        * attribute list.  It invokes
  286        * {@link #emptyElement(String, String, String, Attributes)}
  287        * directly.</p>
  288        *
  289        * @param localName The element's local name.
  290        * @exception org.xml.sax.SAXException If a filter
  291        *            further down the chain raises an exception.
  292         * @see #emptyElement(String, String, String, Attributes)
  293        */
  294       public void emptyElement (String localName)
  295       throws SAXException
  296       {
  297           emptyElement("", localName, "", EMPTY_ATTS);
  298       }
  299   
  300   
  301       /**
  302        * Add an element with character data content.
  303        *
  304        * <p>This is a convenience method to add a complete element
  305        * with character data content, including the start tag
  306        * and end tag.</p>
  307        *
  308        * <p>This method invokes
  309        * {@link @see org.xml.sax.ContentHandler#startElement},
  310        * followed by
  311        * {@link #characters(String)}, followed by
  312        * {@link @see org.xml.sax.ContentHandler#endElement}.</p>
  313        *
  314        * @param uri The element's Namespace URI.
  315        * @param localName The element's local name.
  316        * @param qName The element's default qualified name.
  317        * @param atts The element's attributes.
  318        * @param content The character data content.
  319        * @exception org.xml.sax.SAXException If a filter
  320        *            further down the chain raises an exception.
  321        * @see org.xml.sax.ContentHandler#startElement
  322        * @see #characters(String)
  323        * @see org.xml.sax.ContentHandler#endElement
  324        */
  325       public void dataElement (String uri, String localName,
  326                                String qName, Attributes atts,
  327                                String content)
  328       throws SAXException
  329       {
  330           startElement(uri, localName, qName, atts);
  331           characters(content);
  332           endElement(uri, localName, qName);
  333       }
  334   
  335   
  336       /**
  337        * Add an element with character data content but no qname or attributes.
  338        *
  339        * <p>This is a convenience method to add a complete element
  340        * with character data content, including the start tag
  341        * and end tag.  This method provides an empty string
  342        * for the qname and an empty attribute list. It invokes
  343        * {@link #dataElement(String, String, String, Attributes, String)}}
  344        * directly.</p>
  345        *
  346        * @param uri The element's Namespace URI.
  347        * @param localName The element's local name.
  348        * @param content The character data content.
  349        * @exception org.xml.sax.SAXException If a filter
  350        *            further down the chain raises an exception.
  351        * @see org.xml.sax.ContentHandler#startElement
  352        * @see #characters(String)
  353        * @see org.xml.sax.ContentHandler#endElement
  354        */
  355       public void dataElement (String uri, String localName, String content)
  356       throws SAXException
  357       {
  358           dataElement(uri, localName, "", EMPTY_ATTS, content);
  359       }
  360   
  361   
  362       /**
  363        * Add an element with character data content but no Namespace URI or qname.
  364        *
  365        * <p>This is a convenience method to add a complete element
  366        * with character data content, including the start tag
  367        * and end tag.  The method provides an empty string for the
  368        * Namespace URI, and empty string for the qualified name. It invokes
  369        * {@link #dataElement(String, String, String, Attributes, String)}}
  370        * directly.</p>
  371        *
  372        * @param localName The element's local name.
  373        * @param atts The element's attributes.
  374        * @param content The character data content.
  375        * @exception org.xml.sax.SAXException If a filter
  376        *            further down the chain raises an exception.
  377        * @see org.xml.sax.ContentHandler#startElement
  378        * @see #characters(String)
  379        * @see org.xml.sax.ContentHandler#endElement
  380        */
  381       public void dataElement (String localName, Attributes atts, String content)
  382       throws SAXException
  383       {
  384           dataElement("", localName, "", atts, content);
  385       }
  386   
  387   
  388       /**
  389        * Add an element with character data content but no attributes
  390        * or Namespace URI.
  391        *
  392        * <p>This is a convenience method to add a complete element
  393        * with character data content, including the start tag
  394        * and end tag.  The method provides an empty string for the
  395        * Namespace URI, and empty string for the qualified name,
  396        * and an empty attribute list. It invokes
  397        * {@link #dataElement(String, String, String, Attributes, String)}}
  398        * directly.</p>
  399        *
  400        * @param localName The element's local name.
  401        * @param content The character data content.
  402        * @exception org.xml.sax.SAXException If a filter
  403        *            further down the chain raises an exception.
  404        * @see org.xml.sax.ContentHandler#startElement
  405        * @see #characters(String)
  406        * @see org.xml.sax.ContentHandler#endElement
  407        */
  408       public void dataElement (String localName, String content)
  409       throws SAXException
  410       {
  411           dataElement("", localName, "", EMPTY_ATTS, content);
  412       }
  413   
  414   
  415       /**
  416        * Add a string of character data, with XML escaping.
  417        *
  418        * <p>This is a convenience method that takes an XML
  419        * String, converts it to a character array, then invokes
  420        * {@link @see org.xml.sax.ContentHandler#characters}.</p>
  421        *
  422        * @param data The character data.
  423        * @exception org.xml.sax.SAXException If a filter
  424        *            further down the chain raises an exception.
  425        * @see @see org.xml.sax.ContentHandler#characters
  426        */
  427       public void characters (String data)
  428       throws SAXException
  429       {
  430           char ch[] = data.toCharArray();
  431           characters(ch, 0, ch.length);
  432       }
  433   
  434   
  435   
  436       ////////////////////////////////////////////////////////////////////
  437       // Implementation of org.xml.sax.XMLReader.
  438       ////////////////////////////////////////////////////////////////////
  439       
  440       
  441       /**
  442        * Set the state of a feature.
  443        *
  444        * <p>This will always fail.</p>
  445        *
  446        * @param name The feature name.
  447        * @param state The requested feature state.
  448        * @exception org.xml.sax.SAXNotRecognizedException When the
  449        *            XMLReader does not recognize the feature name.
  450        * @exception org.xml.sax.SAXNotSupportedException When the
  451        *            XMLReader recognizes the feature name but
  452        *            cannot set the requested value.
  453        * @see org.xml.sax.XMLReader#setFeature
  454        */
  455       public void setFeature (String name, boolean state)
  456       throws SAXNotRecognizedException, SAXNotSupportedException
  457       {
  458           throw new SAXNotRecognizedException("Feature: " + name);
  459       }
  460       
  461       
  462       /**
  463        * Look up the state of a feature.
  464        *
  465        * <p>This will always fail.</p>
  466        *
  467        * @param name The feature name.
  468        * @return The current state of the feature.
  469        * @exception org.xml.sax.SAXNotRecognizedException When the
  470        *            XMLReader does not recognize the feature name.
  471        * @exception org.xml.sax.SAXNotSupportedException When the
  472        *            XMLReader recognizes the feature name but
  473        *            cannot determine its state at this time.
  474        * @see org.xml.sax.XMLReader#getFeature
  475        */
  476       public boolean getFeature (String name)
  477       throws SAXNotRecognizedException, SAXNotSupportedException
  478       {
  479           throw new SAXNotRecognizedException("Feature: " + name);
  480       }
  481       
  482       
  483       /**
  484        * Set the value of a property.
  485        *
  486        * <p>Only lexical-handler properties are recognized.</p>
  487        *
  488        * @param name The property name.
  489        * @param state The requested property value.
  490        * @exception org.xml.sax.SAXNotRecognizedException When the
  491        *            XMLReader does not recognize the property name.
  492        * @exception org.xml.sax.SAXNotSupportedException When the
  493        *            XMLReader recognizes the property name but
  494        *            cannot set the requested value.
  495        * @see org.xml.sax.XMLReader#setProperty
  496        */
  497       public void setProperty (String name, Object value)
  498       throws SAXNotRecognizedException, SAXNotSupportedException
  499       {
  500           for (int i = 0; i < LEXICAL_HANDLER_NAMES.length; i++) {
  501               if (LEXICAL_HANDLER_NAMES[i].equals(name)) {
  502                   setLexicalHandler((LexicalHandler) value);
  503                   return;
  504               }
  505           }
  506           throw new SAXNotRecognizedException("Property: " + name);
  507       }
  508       
  509       
  510       /**
  511        * Look up the value of a property.
  512        *
  513        * <p>Only lexical-handler properties are recognized.</p>
  514        *
  515        * @param name The property name.
  516        * @return The current value of the property.
  517        * @exception org.xml.sax.SAXNotRecognizedException When the
  518        *            XMLReader does not recognize the feature name.
  519        * @exception org.xml.sax.SAXNotSupportedException When the
  520        *            XMLReader recognizes the property name but
  521        *            cannot determine its value at this time.
  522        * @see org.xml.sax.XMLReader#setFeature
  523        */
  524       public Object getProperty (String name)
  525       throws SAXNotRecognizedException, SAXNotSupportedException
  526       {
  527           for (int i = 0; i < LEXICAL_HANDLER_NAMES.length; i++) {
  528               if (LEXICAL_HANDLER_NAMES[i].equals(name)) {
  529                   return getLexicalHandler();
  530               }
  531           }
  532           throw new SAXNotRecognizedException("Property: " + name);
  533       }
  534   
  535   
  536       /**
  537        * Parse a document. Subclass must implement.
  538        *
  539        * @param input The input source for the document entity.
  540        * @exception org.xml.sax.SAXException Any SAX exception, possibly
  541        *            wrapping another exception.
  542        * @exception java.io.IOException An IO exception from the parser,
  543        *            possibly from a byte stream or character stream
  544        *            supplied by the application.
  545        * @see org.xml.sax.XMLReader#parse(org.xml.sax.InputSource)
  546        */
  547       public abstract void parse (InputSource input)
  548       throws SAXException, IOException;
  549   
  550   
  551       /**
  552        * Parse a document.
  553        *
  554        * @param systemId The system identifier as a fully-qualified URI.
  555        * @exception org.xml.sax.SAXException Any SAX exception, possibly
  556        *            wrapping another exception.
  557        * @exception java.io.IOException An IO exception from the parser,
  558        *            possibly from a byte stream or character stream
  559        *            supplied by the application.
  560        * @see org.xml.sax.XMLReader#parse(java.lang.String)
  561        */
  562       public void parse (String systemId)
  563       throws SAXException, IOException
  564       {
  565           parse(new InputSource(systemId));
  566       }
  567   
  568   
  569       /**
  570        * Set the entity resolver.
  571        *
  572        * @param resolver The new entity resolver.
  573        * @exception java.lang.NullPointerException If the resolver
  574        *            is null.
  575        * @see org.xml.sax.XMLReader#setEntityResolver
  576        */
  577       public void setEntityResolver (EntityResolver resolver)
  578       {
  579           if (resolver == null) {
  580               throw new NullPointerException("Null entity resolver");
  581           } else {
  582               entityResolver = resolver;
  583           }
  584       }
  585       
  586       
  587       /**
  588        * Get the current entity resolver.
  589        *
  590        * @return The current entity resolver, or null if none was set.
  591        * @see org.xml.sax.XMLReader#getEntityResolver
  592        */
  593       public EntityResolver getEntityResolver ()
  594       {
  595           return entityResolver;
  596       }
  597       
  598       
  599       /**
  600        * Set the DTD event handler.
  601        *
  602        * @param resolver The new DTD handler.
  603        * @exception java.lang.NullPointerException If the handler
  604        *            is null.
  605        * @see org.xml.sax.XMLReader#setDTDHandler
  606        */
  607       public void setDTDHandler (DTDHandler handler)
  608       {
  609           if (handler == null) {
  610               throw new NullPointerException("Null DTD handler");
  611           } else {
  612               dtdHandler = handler;
  613           }
  614       }
  615       
  616       
  617       /**
  618        * Get the current DTD event handler.
  619        *
  620        * @return The current DTD handler, or null if none was set.
  621        * @see org.xml.sax.XMLReader#getDTDHandler
  622        */
  623       public DTDHandler getDTDHandler ()
  624       {
  625           return dtdHandler;
  626       }
  627       
  628       
  629       /**
  630        * Set the content event handler.
  631        *
  632        * @param resolver The new content handler.
  633        * @exception java.lang.NullPointerException If the handler
  634        *            is null.
  635        * @see org.xml.sax.XMLReader#setContentHandler
  636        */
  637       public void setContentHandler (ContentHandler handler)
  638       {
  639           if (handler == null) {
  640               throw new NullPointerException("Null content handler");
  641           } else {
  642               contentHandler = handler;
  643           }
  644       }
  645       
  646       
  647       /**
  648        * Get the content event handler.
  649        *
  650        * @return The current content handler, or null if none was set.
  651        * @see org.xml.sax.XMLReader#getContentHandler
  652        */
  653       public ContentHandler getContentHandler ()
  654       {
  655           return contentHandler;
  656       }
  657       
  658       
  659       /**
  660        * Set the error event handler.
  661        *
  662        * @param handle The new error handler.
  663        * @exception java.lang.NullPointerException If the handler
  664        *            is null.
  665        * @see org.xml.sax.XMLReader#setErrorHandler
  666        */
  667       public void setErrorHandler (ErrorHandler handler)
  668       {
  669           if (handler == null) {
  670               throw new NullPointerException("Null error handler");
  671           } else {
  672               errorHandler = handler;
  673           }
  674       }
  675       
  676       
  677       /**
  678        * Get the current error event handler.
  679        *
  680        * @return The current error handler, or null if none was set.
  681        * @see org.xml.sax.XMLReader#getErrorHandler
  682        */
  683       public ErrorHandler getErrorHandler ()
  684       {
  685           return errorHandler;
  686       }
  687   
  688   
  689   
  690       ////////////////////////////////////////////////////////////////////
  691       // Registration of org.xml.sax.ext.LexicalHandler.
  692       ////////////////////////////////////////////////////////////////////
  693   
  694   
  695       /**
  696        * Set the lexical handler.
  697        *
  698        * @param handler The new lexical handler.
  699        * @exception java.lang.NullPointerException If the handler
  700        *            is null.
  701        */
  702       public void setLexicalHandler (LexicalHandler handler)
  703       {
  704           if (handler == null) {
  705               throw new NullPointerException("Null lexical handler");
  706           } else {
  707               lexicalHandler = handler;
  708           }
  709       }
  710       
  711       
  712       /**
  713        * Get the current lexical handler.
  714        *
  715        * @return The current lexical handler, or null if none was set.
  716        */
  717       public LexicalHandler getLexicalHandler ()
  718       {
  719           return lexicalHandler;
  720       }
  721   
  722   
  723       
  724       ////////////////////////////////////////////////////////////////////
  725       // Implementation of org.xml.sax.EntityResolver.
  726       ////////////////////////////////////////////////////////////////////
  727       
  728       
  729       /**
  730        * Resolves an external entity.
  731        *
  732        * @param publicId The entity's public identifier, or null.
  733        * @param systemId The entity's system identifier.
  734        * @return A new InputSource or null for the default.
  735        * @exception org.xml.sax.SAXException The client may throw
  736        *            an exception during processing.
  737        * @exception java.io.IOException The client may throw an
  738        *            I/O-related exception while obtaining the
  739        *            new InputSource.
  740        * @see org.xml.sax.EntityResolver#resolveEntity
  741        */
  742       public InputSource resolveEntity (String publicId, String systemId)
  743       throws SAXException /* IOException added in SAX2.01 bugfix release */
  744       {
  745           if (entityResolver != null) {
  746               try {
  747                   return entityResolver.resolveEntity(publicId, systemId);
  748               }
  749               catch (IOException ex) {
  750                   throw new SAXException(ex);
  751               }
  752           } else {
  753               return null;
  754           }
  755       }
  756       
  757       
  758       
  759       ////////////////////////////////////////////////////////////////////
  760       // Implementation of org.xml.sax.DTDHandler.
  761       ////////////////////////////////////////////////////////////////////
  762       
  763       
  764       /**
  765        * Add notation declaration.
  766        *
  767        * @param name The notation name.
  768        * @param publicId The notation's public identifier, or null.
  769        * @param systemId The notation's system identifier, or null.
  770        * @exception org.xml.sax.SAXException The client may throw
  771        *            an exception during processing.
  772        * @see org.xml.sax.DTDHandler#notationDecl
  773        */
  774       public void notationDecl (String name, String publicId, String systemId)
  775       throws SAXException
  776       {
  777           if (dtdHandler != null) {
  778               dtdHandler.notationDecl(name, publicId, systemId);
  779           }
  780       }
  781       
  782       
  783       /**
  784        * Add unparsed entity declaration.
  785        *
  786        * @param name The entity name.
  787        * @param publicId The entity's public identifier, or null.
  788        * @param systemId The entity's system identifier, or null.
  789        * @param notationName The name of the associated notation.
  790        * @exception org.xml.sax.SAXException The client may throw
  791        *            an exception during processing.
  792        * @see org.xml.sax.DTDHandler#unparsedEntityDecl
  793        */
  794       public void unparsedEntityDecl (String name, String publicId,
  795       String systemId, String notationName)
  796       throws SAXException
  797       {
  798           if (dtdHandler != null) {
  799               dtdHandler.unparsedEntityDecl(name, publicId, systemId,
  800               notationName);
  801           }
  802       }
  803       
  804       
  805       
  806       ////////////////////////////////////////////////////////////////////
  807       // Implementation of org.xml.sax.ContentHandler.
  808       ////////////////////////////////////////////////////////////////////
  809       
  810       
  811       /**
  812        * Assigns the document locator.
  813        *
  814        * @param locator The document locator.
  815        * @see org.xml.sax.ContentHandler#setDocumentLocator
  816        */
  817       public void setDocumentLocator (Locator locator)
  818       {
  819           this.locator = locator;
  820           if (contentHandler != null) {
  821               contentHandler.setDocumentLocator(locator);
  822           }
  823       }
  824       
  825       
  826       /**
  827        * Send start of document.
  828        *
  829        * @exception org.xml.sax.SAXException The client may throw
  830        *            an exception during processing.
  831        * @see org.xml.sax.ContentHandler#startDocument
  832        */
  833       public void startDocument ()
  834       throws SAXException
  835       {
  836           if (contentHandler != null) {
  837               contentHandler.startDocument();
  838           }
  839       }
  840       
  841       
  842       /**
  843        * Send end of document.
  844        *
  845        * @exception org.xml.sax.SAXException The client may throw
  846        *            an exception during processing.
  847        * @see org.xml.sax.ContentHandler#endDocument
  848        */
  849       public void endDocument ()
  850       throws SAXException
  851       {
  852           if (contentHandler != null) {
  853               contentHandler.endDocument();
  854           }
  855       }
  856       
  857       
  858       /**
  859        * Sends start of namespace prefix mapping.
  860        *
  861        * @param prefix The Namespace prefix.
  862        * @param uri The Namespace URI.
  863        * @exception org.xml.sax.SAXException The client may throw
  864        *            an exception during processing.
  865        * @see org.xml.sax.ContentHandler#startPrefixMapping
  866        */
  867       public void startPrefixMapping (String prefix, String uri)
  868       throws SAXException
  869       {
  870           if (contentHandler != null) {
  871               contentHandler.startPrefixMapping(prefix, uri);
  872           }
  873       }
  874       
  875       
  876       /**
  877        * Sends end of namespace prefix mapping.
  878        *
  879        * @param prefix The Namespace prefix.
  880        * @exception org.xml.sax.SAXException The client may throw
  881        *            an exception during processing.
  882        * @see org.xml.sax.ContentHandler#endPrefixMapping
  883        */
  884       public void endPrefixMapping (String prefix)
  885       throws SAXException
  886       {
  887           if (contentHandler != null) {
  888               contentHandler.endPrefixMapping(prefix);
  889           }
  890       }
  891       
  892       
  893       /**
  894        * Sends start of element.
  895        *
  896        * @param uri The element's Namespace URI, or the empty string.
  897        * @param localName The element's local name, or the empty string.
  898        * @param qName The element's qualified (prefixed) name, or the empty
  899        *        string.
  900        * @param atts The element's attributes.
  901        * @exception org.xml.sax.SAXException The client may throw
  902        *            an exception during processing.
  903        * @see org.xml.sax.ContentHandler#startElement
  904        */
  905       public void startElement (String uri, String localName, String qName,
  906       Attributes atts)
  907       throws SAXException
  908       {
  909           if (contentHandler != null) {
  910               contentHandler.startElement(uri, localName, qName, atts);
  911           }
  912       }
  913       
  914       
  915       /**
  916        * Sends end of element.
  917        *
  918        * @param uri The element's Namespace URI, or the empty string.
  919        * @param localName The element's local name, or the empty string.
  920        * @param qName The element's qualified (prefixed) name, or the empty
  921        *        string.
  922        * @exception org.xml.sax.SAXException The client may throw
  923        *            an exception during processing.
  924        * @see org.xml.sax.ContentHandler#endElement
  925        */
  926       public void endElement (String uri, String localName, String qName)
  927       throws SAXException
  928       {
  929           if (contentHandler != null) {
  930               contentHandler.endElement(uri, localName, qName);
  931           }
  932       }
  933       
  934       
  935       /**
  936        * Sends character data.
  937        *
  938        * @param ch An array of characters.
  939        * @param start The starting position in the array.
  940        * @param length The number of characters to use from the array.
  941        * @exception org.xml.sax.SAXException The client may throw
  942        *            an exception during processing.
  943        * @see org.xml.sax.ContentHandler#characters
  944        */
  945       public void characters (char ch[], int start, int length)
  946       throws SAXException
  947       {
  948           if (contentHandler != null) {
  949               contentHandler.characters(ch, start, length);
  950           }
  951       }
  952       
  953       
  954       /**
  955        * Sends ignorable whitespace.
  956        *
  957        * @param ch An array of characters.
  958        * @param start The starting position in the array.
  959        * @param length The number of characters to use from the array.
  960        * @exception org.xml.sax.SAXException The client may throw
  961        *            an exception during processing.
  962        * @see org.xml.sax.ContentHandler#ignorableWhitespace
  963        */
  964       public void ignorableWhitespace (char ch[], int start, int length)
  965       throws SAXException
  966       {
  967           if (contentHandler != null) {
  968               contentHandler.ignorableWhitespace(ch, start, length);
  969           }
  970       }
  971       
  972       
  973       /**
  974        * Sends processing instruction.
  975        *
  976        * @param target The processing instruction target.
  977        * @param data The text following the target.
  978        * @exception org.xml.sax.SAXException The client may throw
  979        *            an exception during processing.
  980        * @see org.xml.sax.ContentHandler#processingInstruction
  981        */
  982       public void processingInstruction (String target, String data)
  983       throws SAXException
  984       {
  985           if (contentHandler != null) {
  986               contentHandler.processingInstruction(target, data);
  987           }
  988       }
  989       
  990       
  991       /**
  992        * Sends skipped entity.
  993        *
  994        * @param name The name of the skipped entity.
  995        * @exception org.xml.sax.SAXException The client may throw
  996        *            an exception during processing.
  997        * @see org.xml.sax.ContentHandler#skippedEntity
  998        */
  999       public void skippedEntity (String name)
 1000       throws SAXException
 1001       {
 1002           if (contentHandler != null) {
 1003               contentHandler.skippedEntity(name);
 1004           }
 1005       }
 1006       
 1007       
 1008       
 1009       ////////////////////////////////////////////////////////////////////
 1010       // Implementation of org.xml.sax.ErrorHandler.
 1011       ////////////////////////////////////////////////////////////////////
 1012       
 1013       
 1014       /**
 1015        * Sends warning.
 1016        *
 1017        * @param e The nwarning as an exception.
 1018        * @exception org.xml.sax.SAXException The client may throw
 1019        *            an exception during processing.
 1020        * @see org.xml.sax.ErrorHandler#warning
 1021        */
 1022       public void warning (SAXParseException e)
 1023       throws SAXException
 1024       {
 1025           if (errorHandler != null) {
 1026               errorHandler.warning(e);
 1027           }
 1028       }
 1029       
 1030       
 1031       /**
 1032        * Sends error.
 1033        *
 1034        * @param e The error as an exception.
 1035        * @exception org.xml.sax.SAXException The client may throw
 1036        *            an exception during processing.
 1037        * @see org.xml.sax.ErrorHandler#error
 1038        */
 1039       public void error (SAXParseException e)
 1040       throws SAXException
 1041       {
 1042           if (errorHandler != null) {
 1043               errorHandler.error(e);
 1044           }
 1045       }
 1046       
 1047       
 1048       /**
 1049        * Sends fatal error.
 1050        *
 1051        * @param e The error as an exception.
 1052        * @exception org.xml.sax.SAXException The client may throw
 1053        *            an exception during processing.
 1054        * @see org.xml.sax.ErrorHandler#fatalError
 1055        */
 1056       public void fatalError (SAXParseException e)
 1057       throws SAXException
 1058       {
 1059           if (errorHandler != null) {
 1060               errorHandler.fatalError(e);
 1061           }
 1062       }
 1063       
 1064       
 1065       
 1066       ////////////////////////////////////////////////////////////////////
 1067       // Implementation of org.xml.sax.ext.LexicalHandler.
 1068       ////////////////////////////////////////////////////////////////////
 1069   
 1070   
 1071       /**
 1072        * Sends start of DTD.
 1073        *
 1074        * @param name The document type name.
 1075        * @param publicId The declared public identifier for the
 1076        *        external DTD subset, or null if none was declared.
 1077        * @param systemId The declared system identifier for the
 1078        *        external DTD subset, or null if none was declared.
 1079        * @exception org.xml.sax.SAXException If a filter
 1080        *            further down the chain raises an exception.
 1081        * @see org.xml.sax.ext.LexicalHandler#startDTD
 1082        */
 1083       public void startDTD(String name, String publicId, String systemId)
 1084       throws SAXException {
 1085           if (lexicalHandler != null) {
 1086               lexicalHandler.startDTD(name, publicId, systemId);
 1087           }
 1088       }
 1089   
 1090   
 1091       /**
 1092        * Sends end of DTD.
 1093        *
 1094        * @exception org.xml.sax.SAXException If a filter
 1095        *            further down the chain raises an exception.
 1096        * @see org.xml.sax.ext.LexicalHandler#endDTD
 1097        */
 1098       public void endDTD()
 1099       throws SAXException {
 1100           if (lexicalHandler != null) {
 1101               lexicalHandler.endDTD();
 1102           }
 1103       }    
 1104   
 1105   
 1106       /*
 1107        * Sends start of entity.
 1108        *
 1109        * @param name The name of the entity.  If it is a parameter
 1110        *        entity, the name will begin with '%', and if it is the
 1111        *        external DTD subset, it will be "[dtd]".
 1112        * @exception org.xml.sax.SAXException If a filter
 1113        *            further down the chain raises an exception.
 1114        * @see org.xml.sax.ext.LexicalHandler#startEntity
 1115        */
 1116       public void startEntity(String name)
 1117       throws SAXException {
 1118           if (lexicalHandler != null) {
 1119               lexicalHandler.startEntity(name);
 1120           }
 1121       }
 1122   
 1123   
 1124       /*
 1125        * Sends end of entity.
 1126        *
 1127        * @param name The name of the entity that is ending.
 1128        * @exception org.xml.sax.SAXException If a filter
 1129        *            further down the chain raises an exception.
 1130        * @see org.xml.sax.ext.LexicalHandler#endEntity
 1131        */
 1132       public void endEntity(String name)
 1133       throws SAXException {
 1134           if (lexicalHandler != null) {
 1135               lexicalHandler.endEntity(name);
 1136           }
 1137       }
 1138   
 1139   
 1140       /*
 1141        * Sends start of CDATA.
 1142        *
 1143        * @exception org.xml.sax.SAXException If a filter
 1144        *            further down the chain raises an exception.
 1145        * @see org.xml.sax.ext.LexicalHandler#startCDATA
 1146        */
 1147       public void startCDATA()
 1148       throws SAXException {
 1149           if (lexicalHandler != null) {
 1150               lexicalHandler.startCDATA();
 1151           }
 1152       }    
 1153   
 1154   
 1155       /*
 1156        * Sends end of CDATA.
 1157        *
 1158        * @exception org.xml.sax.SAXException If a filter
 1159        *            further down the chain raises an exception.
 1160        * @see org.xml.sax.ext.LexicalHandler#endCDATA
 1161        */
 1162       public void endCDATA()
 1163       throws SAXException {
 1164           if (lexicalHandler != null) {
 1165               lexicalHandler.endCDATA();
 1166           }
 1167       }
 1168   
 1169   
 1170       /*
 1171        * Sends comment.
 1172        *
 1173        * @param ch An array holding the characters in the comment.
 1174        * @param start The starting position in the array.
 1175        * @param length The number of characters to use from the array.
 1176        * @exception org.xml.sax.SAXException If a filter
 1177        *            further down the chain raises an exception.
 1178        * @see org.xml.sax.ext.LexicalHandler#comment
 1179        */
 1180       public void comment(char[] ch, int start, int length)
 1181       throws SAXException {
 1182           if (lexicalHandler != null) {
 1183               lexicalHandler.comment(ch, start, length);
 1184           }
 1185       }
 1186   
 1187   
 1188   
 1189       ////////////////////////////////////////////////////////////////////
 1190       // Internal state.
 1191       ////////////////////////////////////////////////////////////////////
 1192   
 1193       private Locator locator = null;
 1194       private EntityResolver entityResolver = null;
 1195       private DTDHandler dtdHandler = null;
 1196       private ContentHandler contentHandler = null;
 1197       private ErrorHandler errorHandler = null;
 1198       private LexicalHandler lexicalHandler = null;
 1199   
 1200   
 1201   
 1202       ////////////////////////////////////////////////////////////////////
 1203       // Constants.
 1204       ////////////////////////////////////////////////////////////////////
 1205   
 1206   
 1207       protected static final Attributes EMPTY_ATTS = new AttributesImpl();
 1208   
 1209       protected static final String[] LEXICAL_HANDLER_NAMES = {
 1210           "http://xml.org/sax/properties/lexical-handler",
 1211           "http://xml.org/sax/handlers/LexicalHandler"
 1212       };
 1213   
 1214   
 1215   }
 1216   
 1217   // end of XMLReaderBase.java

Save This Page
Home » Xerces-J-src.2.9.1 » sax » [javadoc | source]