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();
- }
}
+
}