You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by cz...@apache.org on 2002/02/14 09:04:21 UTC

cvs commit: jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/xml JaxpParser.java

cziegeler    02/02/14 00:04:21

  Modified:    src/scratchpad/org/apache/avalon/excalibur/xml
                        JaxpParser.java
  Log:
  Added missing configuration for sax parser factory and document builder factory
  
  Revision  Changes    Path
  1.11      +64 -6     jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/xml/JaxpParser.java
  
  Index: JaxpParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/xml/JaxpParser.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- JaxpParser.java	13 Feb 2002 13:24:16 -0000	1.10
  +++ JaxpParser.java	14 Feb 2002 08:04:21 -0000	1.11
  @@ -14,6 +14,7 @@
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
   import org.apache.avalon.framework.parameters.Parameterizable;
   import org.apache.avalon.framework.parameters.Parameters;
  +import org.apache.avalon.framework.parameters.ParameterException;
   import org.w3c.dom.Document;
   import org.xml.sax.*;
   import org.xml.sax.ext.LexicalHandler;
  @@ -46,17 +47,28 @@
    *     recycled in case of parsing errors : some parsers (e.g. Xerces) don't like
    *     to be reused after failure.
    * </li>
  + * <li>sax-parser-factory (string, optional) : the name of the <code>SAXParserFactory</code>
  + *     implementation class to be used instead of using the standard JAXP mechanism
  + *     (<code>SAXParserFactory.newInstance()</code>). This allows to choose
  + *     unambiguously the JAXP implementation to be used when several of them are
  + *     available in the classpath.
  + * </li>
  + * <li>document-builder-factory (string, optional) : the name of the
  + *     <code>DocumentBuilderFactory</code> implementation to be used (similar to
  + *     <code>sax-parser-factory</code> for DOM).
  + * </li>
    * </ul>
    *
    * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
    * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
    * @author <a href="mailto:sylvain@apache.org">Sylvain Wallez</a>
  - * @version CVS $Revision: 1.10 $ $Date: 2002/02/13 13:24:16 $
  + * @version CVS $Revision: 1.11 $ $Date: 2002/02/14 08:04:21 $
    */
   public class JaxpParser
   extends AbstractLogEnabled
   implements Parser, ErrorHandler, Composable, Parameterizable, Poolable {
   
  +
       /** the SAX Parser factory */
       protected SAXParserFactory factory;
   
  @@ -111,6 +123,7 @@
        * Configure
        */
       public void parameterize( Parameters params )
  +    throws ParameterException
       {
           // Validation and namespace prefixes parameters
           boolean validate = params.getParameterAsBoolean("validate", false);
  @@ -119,23 +132,68 @@
           this.stopOnWarning = params.getParameterAsBoolean("stop-on-warning", true);
           this.stopOnRecoverableError = params.getParameterAsBoolean("stop-on-recoverable-error", true);
   
  -        this.factory = SAXParserFactory.newInstance();
  +        // Get the SAXFactory
  +        final String saxParserFactoryName = params.getParameter("sax-parser-factory",
  +                                                                "javax.xml.parsers.SAXParserFactory");
  +        try
  +        {
  +            final Class factoryClass = this.loadClass( saxParserFactoryName );
  +            this.factory = (SAXParserFactory)factoryClass.newInstance();
  +        }
  +        catch(Exception e)
  +        {
  +            throw new ParameterException("Cannot load SAXParserFactory class " + saxParserFactoryName, e);
  +        }
           this.factory.setNamespaceAware(true);
           this.factory.setValidating(validate);
   
  -        this.docFactory = DocumentBuilderFactory.newInstance();
  -        docFactory.setNamespaceAware(true);
  -        docFactory.setValidating(validate);
  +        // Get the DocumentFactory
  +        final String documentBuilderFactoryName = params.getParameter("document-builder-factory",
  +                                                                      "javax.xml.parsers.DocumentBuilderFactory");
  +        try
  +        {
  +            final Class factoryClass = this.loadClass( documentBuilderFactoryName );
  +            this.docFactory = (DocumentBuilderFactory)factoryClass.newInstance();
  +        }
  +        catch(Exception e)
  +        {
  +            throw new ParameterException("Cannot load DocumentBuilderFactory class " + documentBuilderFactoryName, e);
  +        }
  +        this.docFactory.setNamespaceAware(true);
  +        this.docFactory.setValidating(validate);
  +
           if ( this.getLogger().isDebugEnabled() )
           {
               this.getLogger().debug("JaxpParser: validating: " + validate +
                                      ", namespace-prefixes: " + this.nsPrefixes +
                                      ", reuse parser: " + this.reuseParsers +
                                      ", stop on warning: " + this.stopOnWarning +
  -                                   ", stop on recoverable-error: " + this.stopOnRecoverableError);
  +                                   ", stop on recoverable-error: " + this.stopOnRecoverableError +
  +                                   ", saxParserFactory: " + saxParserFactoryName +
  +                                   ", documentBuilderFactory: " + documentBuilderFactoryName);
  +        }
  +    }
  +
  +    /**
  +     * Load a class
  +     */
  +    protected Class loadClass( String name ) throws Exception
  +    {
  +        ClassLoader loader = Thread.currentThread().getContextClassLoader();
  +        if (loader == null)
  +        {
  +            loader = this.getClass().getClassLoader();
           }
  +        return loader.loadClass( name );
       }
   
  +    /**
  +     * Parse the <code>InputSource</code> and send
  +     * SAX events to the consumer.
  +     * Attention: the consumer can either be an XMLConsumer
  +     * or implement the <code>LexicalHandler</code> as well.
  +     * The parse should take care of this.
  +     */
       public void parse(InputSource in, ContentHandler consumer)
       throws SAXException, IOException
       {
  
  
  

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