santiagopg 2003/04/01 10:44:26
Modified: java/src/org/apache/xalan/xsltc/compiler Tag: jdk-1_4_2
Parser.java XSLTC.java
java/src/org/apache/xalan/xsltc/trax Tag: jdk-1_4_2
TemplatesHandlerImpl.java
TransformerFactoryImpl.java
Log:
New implementation of TemplatesHandlerImpl. Fixes output method problem
when reusing TemplatesHandler instances.
Revision Changes Path
No revision
No revision
1.54.2.1 +8 -5 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Parser.java
Index: Parser.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Parser.java,v
retrieving revision 1.54
retrieving revision 1.54.2.1
diff -u -r1.54 -r1.54.2.1
--- Parser.java 15 Oct 2002 13:22:50 -0000 1.54
+++ Parser.java 1 Apr 2003 18:44:25 -0000 1.54.2.1
@@ -109,16 +109,16 @@
private Hashtable _variableScope;
private Stylesheet _currentStylesheet;
private SymbolTable _symbolTable; // Maps QNames to syntax-tree nodes
- private Output _output = null;
+ private Output _output;
private Template _template; // Reference to the template being parsed.
- private boolean _rootNamespaceDef = false; // Used for validity check
+ private boolean _rootNamespaceDef; // Used for validity check
- private SyntaxTreeNode _root = null;
+ private SyntaxTreeNode _root;
private String _target;
- private int _currentImportPrecedence = 1;
+ private int _currentImportPrecedence;
public Parser(XSLTC xsltc) {
_xsltc = xsltc;
@@ -136,6 +136,9 @@
_symbolTable = new SymbolTable();
_xpathParser = new XPathParser(this);
_currentStylesheet = null;
+ _output = null;
+ _root = null;
+ _rootNamespaceDef = false;
_currentImportPrecedence = 1;
initStdClasses();
1.45.2.1 +4 -4 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XSLTC.java
Index: XSLTC.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XSLTC.java,v
retrieving revision 1.45
retrieving revision 1.45.2.1
diff -u -r1.45 -r1.45.2.1
--- XSLTC.java 30 Sep 2002 19:30:11 -0000 1.45
+++ XSLTC.java 1 Apr 2003 18:44:25 -0000 1.45.2.1
@@ -165,10 +165,10 @@
/**
* Only for user by the internal TrAX implementation.
*/
- public void setParser(Parser parser) {
- _parser = parser;
+ public Parser getParser() {
+ return _parser;
}
-
+
/**
* Only for user by the internal TrAX implementation.
*/
No revision
No revision
1.16.2.1 +133 -50
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesHandlerImpl.java
Index: TemplatesHandlerImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TemplatesHandlerImpl.java,v
retrieving revision 1.16
retrieving revision 1.16.2.1
diff -u -r1.16 -r1.16.2.1
--- TemplatesHandlerImpl.java 1 Oct 2002 16:33:03 -0000 1.16
+++ TemplatesHandlerImpl.java 1 Apr 2003 18:44:25 -0000 1.16.2.1
@@ -4,7 +4,7 @@
* The Apache Software License, Version 1.1
*
*
- * Copyright (c) 2001 The Apache Software Foundation. All rights
+ * Copyright (c) 2001-2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -63,21 +63,30 @@
package org.apache.xalan.xsltc.trax;
-import javax.xml.transform.*;
-import javax.xml.transform.sax.*;
+import javax.xml.transform.Source;
+import javax.xml.transform.Templates;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.URIResolver;
+import javax.xml.transform.sax.TemplatesHandler;
+
+import org.apache.xalan.xsltc.compiler.CompilerException;
+import org.apache.xalan.xsltc.compiler.Parser;
+import org.apache.xalan.xsltc.compiler.SourceLoader;
+import org.apache.xalan.xsltc.compiler.Stylesheet;
+import org.apache.xalan.xsltc.compiler.SyntaxTreeNode;
+import org.apache.xalan.xsltc.compiler.XSLTC;
-import org.xml.sax.Locator;
+import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
-
-import org.apache.xalan.xsltc.compiler.*;
-import org.apache.xalan.xsltc.Translet;
-import org.apache.xalan.xsltc.runtime.AbstractTranslet;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.Attributes;
/**
* Implementation of a JAXP1.1 TemplatesHandler
*/
-public class TemplatesHandlerImpl extends Parser
- implements TemplatesHandler, SourceLoader
+public class TemplatesHandlerImpl
+ implements ContentHandler, TemplatesHandler, SourceLoader
{
/**
* System ID for this stylesheet.
@@ -99,29 +108,26 @@
* object belongs to.
*/
private TransformerFactoryImpl _tfactory = null;
+
+ /**
+ * A reference to XSLTC's parser object.
+ */
+ private Parser _parser = null;
/**
* Default constructor
*/
- protected TemplatesHandlerImpl(int indentNumber,
- TransformerFactoryImpl tfactory)
+ protected TemplatesHandlerImpl(int indentNumber,
+ TransformerFactoryImpl tfactory)
{
- super(null);
_indentNumber = indentNumber;
_tfactory = tfactory;
- }
-
- /**
- * Internal initialization
- */
- public void init() {
- // Create and initialize a stylesheet compiler
- final XSLTC xsltc = new XSLTC();
- super.setXSLTC(xsltc);
- xsltc.init();
- super.init();
- xsltc.setParser(this);
- xsltc.setOutputType(XSLTC.BYTEARRAY_OUTPUT);
+
+ // Initialize a parser object
+ XSLTC xsltc = new XSLTC();
+ xsltc.init();
+ xsltc.setOutputType(XSLTC.BYTEARRAY_OUTPUT);
+ _parser = xsltc.getParser();
}
/**
@@ -162,7 +168,7 @@
*/
public Templates getTemplates() {
try {
- final XSLTC xsltc = getXSLTC();
+ XSLTC xsltc = _parser.getXSLTC();
// Set a document loader (for xsl:include/import) if defined
if (_uriResolver != null) {
@@ -183,36 +189,40 @@
transletName = xsltc.getClassName();
Stylesheet stylesheet = null;
- SyntaxTreeNode root = getDocumentRoot();
+ SyntaxTreeNode root = _parser.getDocumentRoot();
// Compile the translet - this is where the work is done!
- if (!errorsFound() && root != null) {
+ if (!_parser.errorsFound() && root != null) {
// Create a Stylesheet element from the root node
- stylesheet = makeStylesheet(root);
+ stylesheet = _parser.makeStylesheet(root);
stylesheet.setSystemId(_systemId);
stylesheet.setParentStylesheet(null);
- setCurrentStylesheet(stylesheet);
+ _parser.setCurrentStylesheet(stylesheet);
// Set it as top-level in the XSLTC object
xsltc.setStylesheet(stylesheet);
- // Create AST under the Stylesheet element
- createAST(stylesheet);
+ // Create AST under the Stylesheet element
+ _parser.createAST(stylesheet);
}
// Generate the bytecodes and output the translet class(es)
- if (!errorsFound() && stylesheet != null) {
+ if (!_parser.errorsFound() && stylesheet != null) {
stylesheet.setMultiDocument(xsltc.isMultiDocument());
- stylesheet.translate();
+
+ // Class synchronization is needed for BCEL
+ synchronized (xsltc.getClass()) {
+ stylesheet.translate();
+ }
}
- if (!errorsFound()) {
+ if (!_parser.errorsFound()) {
// Check that the transformation went well before returning
final byte[][] bytecodes = xsltc.getBytecodes();
if (bytecodes != null) {
- final TemplatesImpl templates =
- new TemplatesImpl(xsltc.getBytecodes(), transletName,
- getOutputProperties(), _indentNumber, _tfactory);
+ final TemplatesImpl templates =
+ new TemplatesImpl(xsltc.getBytecodes(), transletName,
+ _parser.getOutputProperties(), _indentNumber, _tfactory);
// Set URIResolver on templates object
if (_uriResolver != null) {
@@ -229,16 +239,6 @@
}
/**
- * Recieve an object for locating the origin of SAX document events.
- * Most SAX parsers will use this method to inform content handler
- * of the location of the parsed document.
- */
- public void setDocumentLocator(Locator locator) {
- super.setDocumentLocator(locator);
- setSystemId(locator.getSystemId());
- }
-
- /**
* This method implements XSLTC's SourceLoader interface. It is used to
* glue a TrAX URIResolver to the XSLTC compiler's Input and Import classes.
*
@@ -259,6 +259,89 @@
// Falls through
}
return null;
+ }
+
+ // -- ContentHandler --------------------------------------------------
+
+ /**
+ * Re-initialize parser and forward SAX2 event.
+ */
+ public void startDocument() {
+ _parser.init();
+ _parser.startDocument();
+ }
+
+ /**
+ * Just forward SAX2 event to parser object.
+ */
+ public void endDocument() {
+ _parser.endDocument();
+ }
+
+ /**
+ * Just forward SAX2 event to parser object.
+ */
+ public void startPrefixMapping(String prefix, String uri) {
+ _parser.startPrefixMapping(prefix, uri);
+ }
+
+ /**
+ * Just forward SAX2 event to parser object.
+ */
+ public void endPrefixMapping(String prefix) {
+ _parser.endPrefixMapping(prefix);
+ }
+
+ /**
+ * Just forward SAX2 event to parser object.
+ */
+ public void startElement(String uri, String localname, String qname,
+ Attributes attributes) throws SAXException
+ {
+ _parser.startElement(uri, localname, qname, attributes);
+ }
+
+ /**
+ * Just forward SAX2 event to parser object.
+ */
+ public void endElement(String uri, String localname, String qname) {
+ _parser.endElement(uri, localname, qname);
+ }
+
+ /**
+ * Just forward SAX2 event to parser object.
+ */
+ public void characters(char[] ch, int start, int length) {
+ _parser.characters(ch, start, length);
+ }
+
+ /**
+ * Just forward SAX2 event to parser object.
+ */
+ public void processingInstruction(String name, String value) {
+ _parser.processingInstruction(name, value);
+ }
+
+ /**
+ * Just forward SAX2 event to parser object.
+ */
+ public void ignorableWhitespace(char[] ch, int start, int length) {
+ _parser.ignorableWhitespace(ch, start, length);
+ }
+
+ /**
+ * Just forward SAX2 event to parser object.
+ */
+ public void skippedEntity(String name) {
+ _parser.skippedEntity(name);
+ }
+
+ /**
+ * Set internal system Id and forward SAX2 event to parser object.
+ */
+ public void setDocumentLocator(Locator locator) {
+ setSystemId(locator.getSystemId());
+ _parser.setDocumentLocator(locator);
}
}
1.53.2.1 +1 -2
xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerFactoryImpl.java
Index: TransformerFactoryImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerFactoryImpl.java,v
retrieving revision 1.53
retrieving revision 1.53.2.1
diff -u -r1.53 -r1.53.2.1
--- TransformerFactoryImpl.java 15 Oct 2002 19:54:36 -0000 1.53
+++ TransformerFactoryImpl.java 1 Apr 2003 18:44:26 -0000 1.53.2.1
@@ -679,7 +679,6 @@
{
final TemplatesHandlerImpl handler =
new TemplatesHandlerImpl(_indentNumber, this);
- handler.init();
if (_uriResolver != null) {
handler.setURIResolver(_uriResolver);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]