You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by do...@apache.org on 2002/07/09 15:57:57 UTC

cvs commit: jakarta-avalon-excalibur/xmlutil/src/java/org/apache/avalon/excalibur/xml XercesParser.java

donaldp     2002/07/09 06:57:57

  Modified:    xmlutil/src/java/org/apache/avalon/excalibur/xml
                        XercesParser.java
  Log:
  Start reworking class to be capable of being "ThreadSafe"
  
  Revision  Changes    Path
  1.3       +55 -13    jakarta-avalon-excalibur/xmlutil/src/java/org/apache/avalon/excalibur/xml/XercesParser.java
  
  Index: XercesParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/xmlutil/src/java/org/apache/avalon/excalibur/xml/XercesParser.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XercesParser.java	7 Jul 2002 07:19:00 -0000	1.2
  +++ XercesParser.java	9 Jul 2002 13:57:57 -0000	1.3
  @@ -32,17 +32,12 @@
       implements Parser, ErrorHandler, SingleThreaded
   {
       /** the SAX Parser */
  -    private final SAXParser m_parser;
  +    private SAXParser m_parser;
   
       public XercesParser()
           throws SAXException
       {
  -        m_parser = new SAXParser();
  -
  -        m_parser.setFeature( "http://xml.org/sax/features/validation", false );
  -        m_parser.setFeature( "http://xml.org/sax/features/namespaces", true );
  -        m_parser.setFeature( "http://xml.org/sax/features/namespace-prefixes",
  -                             true );
  +        m_parser = createSAXParser();
       }
   
       public void parse( final InputSource in,
  @@ -69,14 +64,23 @@
                          final LexicalHandler lexicalHandler )
           throws SAXException, IOException
       {
  +        final SAXParser parser = getSAXParser();
  +
           if( null != lexicalHandler )
           {
  -            m_parser.setProperty( "http://xml.org/sax/properties/lexical-handler",
  -                                  lexicalHandler );
  +            parser.setProperty( "http://xml.org/sax/properties/lexical-handler",
  +                                lexicalHandler );
           }
  -        m_parser.setErrorHandler( this );
  -        m_parser.setContentHandler( contentHandler );
  -        m_parser.parse( in );
  +        parser.setErrorHandler( this );
  +        parser.setContentHandler( contentHandler );
  +        parser.parse( in );
  +
  +        //Note it is a deliberate choice to make sure that
  +        //the parser is only released when a successful parse
  +        //has occured. If an exception is generated the
  +        //parser becomes fubar so we need to let it go into
  +        //the void to be garbage collected
  +        releaseSAXParser( parser );
       }
   
       /**
  @@ -151,5 +155,43 @@
               spe.getLineNumber() + " col. " + spe.getColumnNumber() +
               "): " + spe.getMessage();
           throw new SAXException( message, spe );
  +    }
  +
  +    /**
  +     * Aquire a parser from the pool of {@link SAXParser} objects.
  +     *
  +     * @return the parser
  +     */
  +    private SAXParser getSAXParser()
  +        throws SAXException
  +    {
  +        return m_parser;
  +    }
  +
  +    /**
  +     * Utility method to release parser back into pool.
  +     *
  +     * @param parser the parser
  +     */
  +    private void releaseSAXParser( final SAXParser parser )
  +    {
  +        m_parser = parser;
  +    }
  +
  +    /**
  +     * Utility method to create a SAXParser.
  +     *
  +     * @return new SAXParser
  +     * @throws SAXException if unable to create parser
  +     */
  +    private SAXParser createSAXParser()
  +        throws SAXException
  +    {
  +        final SAXParser parser = new SAXParser();
  +        parser.setFeature( "http://xml.org/sax/features/validation", false );
  +        parser.setFeature( "http://xml.org/sax/features/namespaces", true );
  +        parser.setFeature( "http://xml.org/sax/features/namespace-prefixes",
  +                           true );
  +        return parser;
       }
   }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>