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]

Reply via email to