You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by gr...@apache.org on 2003/08/06 23:01:27 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/trax TemplatesHandlerImpl.java

grchiu      2003/08/06 14:01:27

  Modified:    java/src/org/apache/xalan/xsltc/trax
                        TemplatesHandlerImpl.java
  Log:
  Patch from Bruno Dumon (bruno@outerthought.org) for bugzilla 20114.
  When using XSLTC's TemplatesHandler to create templates, errors are never
  reported; getTemplates() just returns null.
  Changed behaviour to be inline with Xalan behaviour: stylesheets are
  compiled in the endDocument() event and a SAXException wrapping the real
  exception is thrown.
  
  Revision  Changes    Path
  1.24      +93 -73    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.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- TemplatesHandlerImpl.java	24 Apr 2003 15:45:32 -0000	1.23
  +++ TemplatesHandlerImpl.java	6 Aug 2003 21:01:27 -0000	1.24
  @@ -75,6 +75,7 @@
   import org.apache.xalan.xsltc.compiler.Stylesheet;
   import org.apache.xalan.xsltc.compiler.SyntaxTreeNode;
   import org.apache.xalan.xsltc.compiler.XSLTC;
  +import org.apache.xalan.xsltc.compiler.util.ErrorMsg;
   
   import org.xml.sax.ContentHandler;
   import org.xml.sax.InputSource;
  @@ -82,6 +83,8 @@
   import org.xml.sax.SAXException;
   import org.xml.sax.Attributes;
   
  +import java.util.Vector;
  +
   /**
    * Implementation of a JAXP1.1 TemplatesHandler
    */
  @@ -115,6 +118,11 @@
       private Parser _parser = null;
   
       /**
  +     * The created Templates object.
  +     */
  +    private TemplatesImpl _templates = null;
  +
  +    /**
        * Default constructor
        */
       protected TemplatesHandlerImpl(int indentNumber,
  @@ -164,77 +172,7 @@
        *         process, or null if no Templates object has been created.
        */
       public Templates getTemplates() {
  -	try {
  -	    XSLTC xsltc = _parser.getXSLTC();
  -
  -	    // Set the translet class name if not already set
  -	    String transletName = null;
  -	    if (_systemId != null) {
  -		transletName = Util.baseName(_systemId);
  -	    }
  -	    else {
  -	    	transletName = (String)_tfactory.getAttribute("translet-name");
  -	    }
  -	    xsltc.setClassName(transletName);
  -
  -	    // Get java-legal class name from XSLTC module
  -	    transletName = xsltc.getClassName();
  -
  -	    Stylesheet stylesheet = null;
  -	    SyntaxTreeNode root = _parser.getDocumentRoot();
  -
  -	    // Compile the translet - this is where the work is done!
  -	    if (!_parser.errorsFound() && root != null) {
  -		// Create a Stylesheet element from the root node
  -		stylesheet = _parser.makeStylesheet(root);
  -		stylesheet.setSystemId(_systemId);
  -		stylesheet.setParentStylesheet(null);
  -
  -                // Set a document loader (for xsl:include/import) if defined
  -                if (_uriResolver != null) {
  -                    stylesheet.setSourceLoader(this);
  -                }
  -
  -		_parser.setCurrentStylesheet(stylesheet);
  -
  -		// Set it as top-level in the XSLTC object
  -		xsltc.setStylesheet(stylesheet);
  -
  -		// Create AST under the Stylesheet element
  -		_parser.createAST(stylesheet);
  -	    }
  -
  -	    // Generate the bytecodes and output the translet class(es)
  -	    if (!_parser.errorsFound() && stylesheet != null) {
  -		stylesheet.setMultiDocument(xsltc.isMultiDocument());
  -		stylesheet.setHasIdCall(xsltc.hasIdCall());
  -
  -                // Class synchronization is needed for BCEL
  -                synchronized (xsltc.getClass()) {
  -                    stylesheet.translate();
  -                }
  -	    }
  -
  -	    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,
  -			    _parser.getOutputProperties(), _indentNumber, _tfactory);
  -
  -		    // Set URIResolver on templates object
  -		    if (_uriResolver != null) {
  -			templates.setURIResolver(_uriResolver);
  -		    }
  -		    return templates;
  -		}
  -	    }
  -	}
  -	catch (CompilerException e) {
  -	    // falls through
  -	}
  -	return null;
  +        return _templates;
       }
   
       /**
  @@ -275,8 +213,90 @@
       /**
        * Just forward SAX2 event to parser object.
        */
  -    public void endDocument() {
  +    public void endDocument() throws SAXException {
           _parser.endDocument();
  +
  +        // create the templates
  +        try {
  +            XSLTC xsltc = _parser.getXSLTC();
  +
  +            // Set the translet class name if not already set
  +            String transletName = null;
  +            if (_systemId != null) {
  +                transletName = Util.baseName(_systemId);
  +            }
  +            else {
  +                transletName = (String)_tfactory.getAttribute("translet-name");
  +            }
  +            xsltc.setClassName(transletName);
  +
  +            // Get java-legal class name from XSLTC module
  +            transletName = xsltc.getClassName();
  +
  +            Stylesheet stylesheet = null;
  +            SyntaxTreeNode root = _parser.getDocumentRoot();
  +
  +            // Compile the translet - this is where the work is done!
  +            if (!_parser.errorsFound() && root != null) {
  +                // Create a Stylesheet element from the root node
  +                stylesheet = _parser.makeStylesheet(root);
  +                stylesheet.setSystemId(_systemId);
  +                stylesheet.setParentStylesheet(null);
  +
  +                // Set a document loader (for xsl:include/import) if defined
  +                if (_uriResolver != null) {
  +                    stylesheet.setSourceLoader(this);
  +                }
  +
  +                _parser.setCurrentStylesheet(stylesheet);
  +
  +                // Set it as top-level in the XSLTC object
  +                xsltc.setStylesheet(stylesheet);
  +
  +                // Create AST under the Stylesheet element
  +                _parser.createAST(stylesheet);
  +            }
  +
  +            // Generate the bytecodes and output the translet class(es)
  +            if (!_parser.errorsFound() && stylesheet != null) {
  +                stylesheet.setMultiDocument(xsltc.isMultiDocument());
  +                stylesheet.setHasIdCall(xsltc.hasIdCall());
  +
  +                // Class synchronization is needed for BCEL
  +                synchronized (xsltc.getClass()) {
  +                    stylesheet.translate();
  +                }
  +            }
  +
  +            if (!_parser.errorsFound()) {
  +                // Check that the transformation went well before returning
  +                final byte[][] bytecodes = xsltc.getBytecodes();
  +                if (bytecodes != null) {
  +                    _templates =
  +                    new TemplatesImpl(xsltc.getBytecodes(), transletName,
  +                        _parser.getOutputProperties(), _indentNumber, _tfactory);
  +
  +                    // Set URIResolver on templates object
  +                    if (_uriResolver != null) {
  +                        _templates.setURIResolver(_uriResolver);
  +                    }
  +                }
  +            }
  +            else {
  +                StringBuffer errorMessage = new StringBuffer();
  +                Vector errors = _parser.getErrors();
  +                final int count = errors.size();
  +                for (int i = 0; i < count; i++) {
  +                    if (errorMessage.length() > 0)
  +                        errorMessage.append('\n');
  +                    errorMessage.append(errors.elementAt(i).toString());
  +                }
  +                throw new SAXException(ErrorMsg.JAXP_COMPILE_ERR, new TransformerException(errorMessage.toString()));
  +            }
  +        }
  +        catch (CompilerException e) {
  +            throw new SAXException(ErrorMsg.JAXP_COMPILE_ERR, e);
  +        }
       }
   
       /**
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org