You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by sb...@locus.apache.org on 2000/08/07 23:32:06 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/processor ProcessorImport.java ProcessorInclude.java

sboag       00/08/07 14:32:05

  Modified:    java/src/org/apache/xalan/processor ProcessorImport.java
                        ProcessorInclude.java
  Log:
  Use URLResolver and Entity resolver in parse.  Bottleneck parsing for both xsl:import and xsl:include.
  
  Revision  Changes    Path
  1.3       +7 -31     xml-xalan/java/src/org/apache/xalan/processor/ProcessorImport.java
  
  Index: ProcessorImport.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/processor/ProcessorImport.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ProcessorImport.java	2000/06/24 18:31:58	1.2
  +++ ProcessorImport.java	2000/08/07 21:32:04	1.3
  @@ -56,6 +56,7 @@
    */
   package org.apache.xalan.processor;
   
  +import org.apache.xalan.utils.TreeWalker;
   import org.apache.xalan.templates.Stylesheet;
   import org.apache.xalan.templates.StylesheetComposed;
   import org.apache.xalan.res.XSLMessages;
  @@ -64,8 +65,12 @@
   import org.xml.sax.Attributes;
   import org.xml.sax.XMLReader;
   import org.xml.sax.helpers.XMLReaderFactory;
  +import org.xml.sax.InputSource;
  +import org.xml.sax.EntityResolver;
   import java.net.URL;
   import java.io.IOException;
  +import trax.URIResolver;
  +import org.w3c.dom.Node;
   
   /**
    * This class processes parse events for an xsl:import element.
  @@ -113,39 +118,10 @@
       handler.pushImportURL(hrefUrl);
       int savedStylesheetType = handler.getStylesheetType();
       handler.setStylesheetType(StylesheetHandler.STYPE_IMPORT);
  -
  +    
       try
  -    {
  -      XMLReader reader = handler.getStylesheetProcessor().getXMLReader();
  -      if(null == reader)
  -      {
  -        reader = XMLReaderFactory.createXMLReader();
  -      }
  -      else
  -      {
  -        Class readerClass = ((Object)reader).getClass();
  -        reader = (XMLReader)readerClass.newInstance();
  -      }
  -            
  -      reader.setContentHandler(handler);
  -      reader.parse(getHref());
  -
  -    }
  -    catch(InstantiationException ie)
  -    {
  -      handler.error("Could not clone parser!", ie);
  -    }
  -    catch(IllegalAccessException iae)
  -    {
  -      handler.error("Can not access class!", iae);
  -    }
  -    catch(IOException ioe)
  -    {
  -      handler.error(XSLTErrorResources.ER_IOEXCEPTION, new Object[] {hrefUrl}, ioe); 
  -    }
  -    catch(SAXException ioe)
       {
  -      handler.error(XSLTErrorResources.ER_IOEXCEPTION, new Object[] {hrefUrl}, ioe); 
  +      parse (handler, uri, localName, rawName, attributes);
       }
       finally
       {
  
  
  
  1.3       +63 -14    xml-xalan/java/src/org/apache/xalan/processor/ProcessorInclude.java
  
  Index: ProcessorInclude.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/processor/ProcessorInclude.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ProcessorInclude.java	2000/06/24 18:31:58	1.2
  +++ ProcessorInclude.java	2000/08/07 21:32:04	1.3
  @@ -56,15 +56,20 @@
    */
   package org.apache.xalan.processor;
   
  +import org.apache.xalan.utils.TreeWalker;
   import org.apache.xalan.templates.Stylesheet;
   import org.apache.xalan.res.XSLMessages;
   import org.apache.xalan.res.XSLTErrorResources;
   import org.xml.sax.SAXException;
   import org.xml.sax.Attributes;
   import org.xml.sax.XMLReader;
  +import org.xml.sax.InputSource;
  +import org.xml.sax.EntityResolver;
   import java.net.URL;
   import java.io.IOException;
   import org.xml.sax.helpers.XMLReaderFactory;
  +import trax.URIResolver;
  +import org.w3c.dom.Node;
   
   /**
    * Processor class for xsl:include markup.
  @@ -130,20 +135,68 @@
   
       try
       {
  -      XMLReader reader = handler.getStylesheetProcessor().getXMLReader();
  +      parse (handler, uri, localName, rawName, attributes);
  +    }
  +    finally
  +    {
  +      handler.setStylesheetType(savedStylesheetType);
  +      handler.popStylesheet();
  +    }
  +  }
  +  
  +  protected void parse (StylesheetHandler handler, 
  +                            String uri, String localName,
  +                            String rawName, Attributes attributes)
  +    throws SAXException
  +  {
  +    URIResolver uriresolver = handler.getStylesheetProcessor().getURIResolver();
   
  -      if(null == reader)
  +    try
  +    {
  +      XMLReader reader = null;
  +      boolean tryCreatingReader = true;
  +      EntityResolver entityResolver 
  +        = handler.getStylesheetProcessor().getEntityResolver();
  +
  +      if(null != uriresolver)
         {
  -        reader = XMLReaderFactory.createXMLReader();
  +        tryCreatingReader = false;
  +        InputSource inputSource = (null != entityResolver) 
  +                                  ? entityResolver.resolveEntity(null, getHref()) : 
  +                                    new InputSource(getHref());
  +        reader = uriresolver.getXMLReader(inputSource);
  +        if(null == reader)
  +        {
  +          Node node = uriresolver.getDOMNode(inputSource);
  +          if(null != node)
  +          {
  +            TreeWalker walker = new TreeWalker(handler);
  +            walker.traverse(node);
  +          }
  +          else
  +            tryCreatingReader = true;
  +        }
         }
  -      else
  +      if(tryCreatingReader)
         {
  -        Class readerClass = ((Object)reader).getClass();
  -        reader = (XMLReader)readerClass.newInstance();
  +        reader = handler.getStylesheetProcessor().getXMLReader();
  +        if(null == reader)
  +        {
  +          reader = XMLReaderFactory.createXMLReader();
  +        }
  +        else
  +        {
  +          Class readerClass = ((Object)reader).getClass();
  +          reader = (XMLReader)readerClass.newInstance();
  +        }
         }
  -      
  -      reader.setContentHandler(handler);
  -      reader.parse(getHref());
  +      if(null != reader)
  +      {
  +        if(null != entityResolver)
  +          reader.setEntityResolver(entityResolver);
  +        reader.setContentHandler(handler);
  +        reader.parse(getHref());
  +      }
       }
       catch(InstantiationException ie)
       {
  @@ -161,11 +214,7 @@
       {
         handler.error(XSLTErrorResources.ER_IOEXCEPTION, new Object[] {getHref()}, ioe); 
       }
  -    finally
  -    {
  -      handler.setStylesheetType(savedStylesheetType);
  -      handler.popStylesheet();
  -    }
     }
  +
   
   }