You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mo...@apache.org on 2001/08/02 15:25:11 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/trax TransformerHandlerImpl.java SAX2DOM.java TransformerFactoryImpl.java TransformerImpl.java

morten      01/08/02 06:25:11

  Modified:    java/src/org/apache/xalan/xsltc/trax SAX2DOM.java
                        TransformerFactoryImpl.java TransformerImpl.java
  Added:       java/src/org/apache/xalan/xsltc/trax
                        TransformerHandlerImpl.java
  Log:
  Added an implementation of the TransformerHandler interface of TrAX/JAXP.
  Implemented the 4 methods in TransformerFactory to instanciate this
  TransformerHandler implementation.
  Added an attribute of the TransformerFactory which contains the default
  name for generated translet classes (the default name is GregorSamsa from
  Kafka's Metemorphosis), but should be set by the user in cases where the
  Templates implementation cannot get the systemId from the Source object.
  
  Revision  Changes    Path
  1.2       +2 -2      xml-xalan/java/src/org/apache/xalan/xsltc/trax/SAX2DOM.java
  
  Index: SAX2DOM.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/SAX2DOM.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SAX2DOM.java	2001/08/01 19:24:03	1.1
  +++ SAX2DOM.java	2001/08/02 13:25:11	1.2
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: SAX2DOM.java,v 1.1 2001/08/01 19:24:03 tmiller Exp $
  + * @(#)$Id: SAX2DOM.java,v 1.2 2001/08/02 13:25:11 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -95,7 +95,7 @@
       }
   
       public void characters(char[] ch, int start, int length) {
  -	Text text = _document.createTextNode(new String(ch));
  +	Text text = _document.createTextNode(new String(ch, start, length));
   	Node last = (Node)_nodeStk.peek();
   	last.appendChild(text);
       }
  
  
  
  1.16      +27 -18    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.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- TransformerFactoryImpl.java	2001/07/30 13:35:41	1.15
  +++ TransformerFactoryImpl.java	2001/08/02 13:25:11	1.16
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: TransformerFactoryImpl.java,v 1.15 2001/07/30 13:35:41 morten Exp $
  + * @(#)$Id: TransformerFactoryImpl.java,v 1.16 2001/08/02 13:25:11 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -105,8 +105,8 @@
       private URIResolver _uriResolver = null;
   
       // Cache for the newTransformer() method - see method for details
  +    private String      _defaultTransletName = "GregorSamsa";
       private Transformer _copyTransformer = null;
  -    private static final String COPY_TRANSLET_NAME = "GregorSamsa";
       private static final String COPY_TRANSLET_CODE =
   	"<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">"+
   	"<xsl:template match=\"/\"><xsl:copy-of select=\".\"/></xsl:template>"+
  @@ -161,8 +161,6 @@
       /**
        * javax.xml.transform.sax.TransformerFactory implementation.
        * Returns the value set for a TransformerFactory attribute
  -     * We are currently not using any attributes with XSLTC. We should try to
  -     * avoid using attributes as this can make us less flexible.
        *
        * @param name The attribute name
        * @return An object representing the attribute value
  @@ -170,14 +168,14 @@
        */
       public Object getAttribute(String name) 
   	throws IllegalArgumentException { 
  -        throw new IllegalArgumentException(NYI);
  +	if (name.equals("translet-name"))
  +	    return(_defaultTransletName);
  +	return(null);
       }
   
       /**
        * javax.xml.transform.sax.TransformerFactory implementation.
  -     * Returns the value set for a TransformerFactory attribute
  -     * We are currently not using any attributes with XSLTC. We should try to
  -     * avoid using attributes as this can make us less flexible.
  +     * Sets the value for a TransformerFactory attribute.
        *
        * @param name The attribute name
        * @param value An object representing the attribute value
  @@ -185,7 +183,10 @@
        */
       public void setAttribute(String name, Object value) 
   	throws IllegalArgumentException { 
  -        throw new IllegalArgumentException(NYI);
  +	// Set the default translet name (ie. class name), which will be used
  +	// for translets that cannot be given a name from their system-id.
  +	if ((name.equals("translet-name")) && (value instanceof String))
  +	    _defaultTransletName = (String)value;
       }
   
       /**
  @@ -200,6 +201,8 @@
       public boolean getFeature(String name) { 
   	// All supported features should be listed here
   	String[] features = {
  +	    DOMSource.FEATURE,
  +	    DOMResult.FEATURE,
   	    SAXSource.FEATURE,
   	    SAXResult.FEATURE,
   	    StreamSource.FEATURE,
  @@ -286,8 +289,8 @@
   	byte[] bytes = COPY_TRANSLET_CODE.getBytes();
   	ByteArrayInputStream bytestream = new ByteArrayInputStream(bytes);
   	InputSource input = new InputSource(bytestream);
  -	input.setSystemId(COPY_TRANSLET_NAME);
  -	bytecodes = xsltc.compile(COPY_TRANSLET_NAME, input);
  +	input.setSystemId(_defaultTransletName);
  +	bytecodes = xsltc.compile(_defaultTransletName, input);
   
   	// Check that the transformation went well before returning
   	if (bytecodes == null) {
  @@ -295,7 +298,7 @@
   	}
   
   	// Create a Transformer object and store for other calls
  -	Templates templates = new TemplatesImpl(bytecodes, COPY_TRANSLET_NAME);
  +	Templates templates = new TemplatesImpl(bytecodes,_defaultTransletName);
   	_copyTransformer = templates.newTransformer();
   	if (_uriResolver != null) _copyTransformer.setURIResolver(_uriResolver);
   	return(_copyTransformer);
  @@ -481,20 +484,22 @@
        */
       public TemplatesHandler newTemplatesHandler() 
   	throws TransformerConfigurationException { 
  -	throw new TransformerConfigurationException(NYI);
  +	return(new TemplatesHandlerImpl());
       }
   
       /**
        * javax.xml.transform.sax.SAXTransformerFactory implementation.
        * Get a TransformerHandler object that can process SAX ContentHandler
  -     * events into a Result.
  +     * events into a Result. This method will return a pure copy transformer.
        *
        * @return A TransformerHandler object that can handle SAX events
        * @throws TransformerConfigurationException
        */
       public TransformerHandler newTransformerHandler() 
   	throws TransformerConfigurationException {
  -	throw new TransformerConfigurationException(NYI);
  +	final Transformer transformer = newTransformer();
  +	final TransformerImpl internal = (TransformerImpl)transformer;
  +	return(new TransformerHandlerImpl(internal));
       }
   
       /**
  @@ -509,7 +514,9 @@
        */
       public TransformerHandler newTransformerHandler(Source src) 
   	throws TransformerConfigurationException { 
  -        throw new TransformerConfigurationException(NYI);
  +	final Transformer transformer = newTransformer(src);
  +	final TransformerImpl internal = (TransformerImpl)transformer;
  +	return(new TransformerHandlerImpl(internal));
       }
   
       /**
  @@ -523,8 +530,10 @@
        * @throws TransformerConfigurationException
        */    
       public TransformerHandler newTransformerHandler(Templates templates) 
  -	throws TransformerConfigurationException  { 
  -        throw new TransformerConfigurationException(NYI);
  +	throws TransformerConfigurationException  {
  +	final Transformer transformer = templates.newTransformer();
  +	final TransformerImpl internal = (TransformerImpl)transformer;
  +	return(new TransformerHandlerImpl(internal));
       }
   
   
  
  
  
  1.12      +35 -7     xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerImpl.java
  
  Index: TransformerImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerImpl.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- TransformerImpl.java	2001/08/02 11:57:52	1.11
  +++ TransformerImpl.java	2001/08/02 13:25:11	1.12
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: TransformerImpl.java,v 1.11 2001/08/02 11:57:52 tmiller Exp $
  + * @(#)$Id: TransformerImpl.java,v 1.12 2001/08/02 13:25:11 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -118,6 +118,9 @@
       private final static String NO_STRING    = "no";
       private final static String YES_STRING   = "yes";
       private final static String XML_STRING   = "xml";
  +
  +    // Pre-set DOMImpl to use as input (used only with TransformerHandlerImpl)
  +    private DOMImpl _dom = null;
       
       // List all error messages here
       private final static String TRANSLET_ERR_MSG = 
  @@ -126,6 +129,10 @@
   	"No defined output handler for transformation result.";
       private static final String ERROR_LISTENER_NULL =
   	"Attempting to set ErrorListener for Transformer to null";
  +    private static final String INPUT_SOURCE_EMPTY =
  +	"The Source object passed to transform() has no contents.";
  +    private static final String OUTPUT_RESULT_EMPTY =
  +	"The Result object passed to transform() is invalid.";
   
       /**
        * Implements JAXP's Transformer constructor
  @@ -136,6 +143,13 @@
       }
   
       /**
  +     * Returns the translet wrapped inside this Transformer
  +     */
  +    protected AbstractTranslet getTranslet() {
  +	return(_translet);
  +    }
  +
  +    /**
        * Implements JAXP's Transformer.transform()
        *
        * @param source Contains the input XML document
  @@ -159,7 +173,7 @@
   	}
   
   	// Run the transformation
  -	transform(source, _handler, _encoding);
  +	transform(source, (ContentHandler)_handler, _encoding);
   
   	// If a DOMResult, then we must set the DOM Tree so it can
   	// be retrieved later 
  @@ -219,8 +233,7 @@
   		return(new DefaultSAXOutputHandler(ostream, _encoding));
   	    }
   	    else {
  -		// Handle error!!!
  -		return null;
  +		throw new TransformerException(OUTPUT_RESULT_EMPTY);
   	    }
   	}
   	// If we cannot write to the location specified by the SystemId
  @@ -239,11 +252,25 @@
       }
   
       /**
  +     * Set the internal DOMImpl that will be used for the next transformation
  +     */
  +    protected void setDOM(DOMImpl dom) {
  +	_dom = dom;
  +    }
  +
  +    /**
        * Builds an internal DOM from a TrAX Source object
        */
       private DOMImpl getDOM(Source source, int mask)
   	throws TransformerException {
   	try {
  +	    // Use the pre-defined DOM if present
  +	    if (_dom != null) {
  +		DOMImpl dom = _dom;
  +		_dom = null; // use only once, so reset to 'null'
  +		return(dom);
  +	    }
  +
   	    // Create an internal DOM (not W3C) and get SAX2 input handler
   	    final DOMImpl dom = new DOMImpl();
   	    final ContentHandler inputHandler = dom.getBuilder();
  @@ -259,7 +286,6 @@
   		final InputSource input  = sax.getInputSource();
   		final String      systemId = sax.getSystemId();
   		dtdMonitor.handleDTD(reader);
  -
   		reader.setContentHandler(inputHandler);
   		reader.parse(input);
   		dom.setDocumentURI(systemId);
  @@ -273,7 +299,7 @@
   		final String      systemId = domsrc.getSystemId(); 
   		dtdMonitor.handleDTD(dom2sax);
   		dom2sax.setContentHandler(inputHandler);
  -		dom2sax.parse(input);
  +		dom2sax.parse(input); // need this parameter?
   		dom.setDocumentURI(systemId);
   	    }
   	    // Handle StreamSource input
  @@ -300,7 +326,7 @@
   		else if (systemId != null)
   		    input = new InputSource(systemId);
   		else
  -		    input = null; // TODO - signal error!!!!
  +		    throw new TransformerException(INPUT_SOURCE_EMPTY);
   		reader.parse(input);
   		dom.setDocumentURI(systemId);
   	    }
  @@ -359,6 +385,8 @@
   	catch (RuntimeException e) {
   	    if (_errorListener != null)
   		postErrorToListener("Runtime Error: " + e.getMessage());
  +	    System.err.println("Error: "+e.getMessage());
  +	    e.printStackTrace();
   	    throw new TransformerException(e);
   	}
   	catch (Exception e) {
  
  
  
  1.1                  xml-xalan/java/src/org/apache/xalan/xsltc/trax/TransformerHandlerImpl.java
  
  Index: TransformerHandlerImpl.java
  ===================================================================
  /*
   * @(#)$Id: TransformerHandlerImpl.java,v 1.1 2001/08/02 13:25:11 morten Exp $
   *
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Xalan" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation and was
   * originally based on software copyright (c) 2001, Sun
   * Microsystems., http://www.sun.com.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * @author Morten Jorgensen
   *
   */
  
  package org.apache.xalan.xsltc.trax;
  
  import org.xml.sax.*;
  
  import javax.xml.transform.*;
  import javax.xml.transform.sax.*;
  
  import org.apache.xalan.xsltc.Translet;
  import org.apache.xalan.xsltc.dom.DOMImpl;
  import org.apache.xalan.xsltc.dom.DTDMonitor;
  import org.apache.xalan.xsltc.runtime.AbstractTranslet;
  
  /**
   * Implementation of a JAXP1.1 TransformerHandler
   */
  public class TransformerHandlerImpl implements TransformerHandler {
  
      private TransformerImpl  _transformer;
      private AbstractTranslet _translet = null;
      private String           _systemId;
      private DOMImpl          _dom = null;
      private ContentHandler   _handler = null;
      private DTDMonitor       _dtd = null;
      private Result           _result = null;
  
      private boolean          _done = false; // Set in endDocument()
  
      /**
       * Cosntructor - pass in reference to a TransformerImpl object
       */
      public TransformerHandlerImpl(TransformerImpl transformer) {
  	// Save the reference to the transformer
  	_transformer = transformer;
  
  	// Create an internal DOM (not W3C) and get SAX2 input handler
  	_dom = new DOMImpl();
  	_handler = _dom.getBuilder();
  
  	// Set this DOM as the transformer's DOM
  	_transformer.setDOM(_dom);
  	
  	// Get a reference to the translet wrapped inside the transformer
  	_translet = _transformer.getTranslet();
      }
  
      /**
       * Implements javax.xml.transform.sax.TransformerHandler.getSystemId()
       * Get the base ID (URI or system ID) from where relative URLs will be
       * resolved.
       * @return The systemID that was set with setSystemId(String id)
       */
      public String getSystemId() {
  	return _systemId;
      }
  
      /**
       * Implements javax.xml.transform.sax.TransformerHandler.setSystemId()
       * Get the base ID (URI or system ID) from where relative URLs will be
       * resolved.
       * @param id Base URI for this stylesheet
       */
      public void setSystemId(String id) {
  	_systemId = id;
      }
  
      /**
       * Implements javax.xml.transform.sax.TransformerHandler.getTransformer()
       * Get the Transformer associated with this handler, which is needed in
       * order to set parameters and output properties.
       * @return The Transformer object
       */
      public Transformer getTransformer() {
  	return(null);
      }
  
      /**
       * Implements javax.xml.transform.sax.TransformerHandler.setResult()
       * Enables the user of the TransformerHandler to set the to set the Result
       * for the transformation.
       * @param result A Result instance, should not be null
       * @throws IllegalArgumentException if result is invalid for some reason
       */
      public void setResult(Result result) throws IllegalArgumentException {
  	_result = result;
  
  	// Run the transformation now, if not already done
  	if (_done) {
  	    try {
  		_transformer.setDOM(_dom);
  		_transformer.transform(null, _result);
  	    }
  	    catch (TransformerException e) {
  		// What the hell are we supposed to do with this???
  		throw new IllegalArgumentException(e.getMessage());
  	    }
  	}
      }
  
      /**
       * Implements org.xml.sax.ContentHandler.characters()
       * Receive notification of character data.
       */
      public void characters(char[] ch, int start, int length) 
  	throws SAXException {
  	_handler.characters(ch, start, length);
      }
  
      /**
       * Implements org.xml.sax.ContentHandler.startDocument()
       * Receive notification of the beginning of a document.
       */
      public void startDocument() throws SAXException {
  	_handler.startDocument();
      }
  
      /**
       * Implements org.xml.sax.ContentHandler.endDocument()
       * Receive notification of the end of a document.
       */
      public void endDocument() throws SAXException {
  	// Signal to the DOMBuilder that the document is complete
  	_handler.endDocument();
  	// Pass unparsed entity declarations (if any) to the translet 
  	if (_dtd != null) _translet.setDTDMonitor(_dtd);
  	// Run the transformation now if we have a reference to a Result object
  	if (_result != null) {
  	    try {
  		_transformer.setDOM(_dom);
  		_transformer.transform(null, _result);
  	    }
  	    catch (TransformerException e) {
  		throw new SAXException(e);
  	    }
  	}
  	// Signal that the internal DOM is build (see 'setResult()').
  	_done = true;
      }
  	
      /**
       * Implements org.xml.sax.ContentHandler.startElement()
       * Receive notification of the beginning of an element.
       */
      public void startElement(String uri, String localName,
  			     String qname, Attributes attributes)
  	throws SAXException {
  	_handler.startElement(uri, localName, qname, attributes);
      }
  	
      /**
       * Implements org.xml.sax.ContentHandler.endElement()
       * Receive notification of the end of an element.
       */
      public void endElement(String namespaceURI, String localName, String qname)
  	throws SAXException {
  	_handler.endElement(namespaceURI, localName, qname);
      }
  
      /**
       * Implements org.xml.sax.ContentHandler.processingInstruction()
       * Receive notification of a processing instruction.
       */
      public void processingInstruction(String target, String data)
  	throws SAXException {
  	_handler.processingInstruction(target, data);
      }
  
      /**
       * Implements org.xml.sax.ContentHandler.ignorableWhitespace()
       * Receive notification of ignorable whitespace in element
       * content. Similar to characters(char[], int, int).
       */
      public void ignorableWhitespace(char[] ch, int start, int length)
  	throws SAXException {
  	_handler.ignorableWhitespace(ch, start, length);
      }
  
      /**
       * Implements org.xml.sax.ContentHandler.setDocumentLocator()
       * Receive an object for locating the origin of SAX document events. 
       * We do not handle this method, and the input is quietly ignored
       */
      public void setDocumentLocator(Locator locator) {
  	// Not handled by DOMBuilder - ignored
      }
  
      /**
       * Implements org.xml.sax.ContentHandler.skippedEntity()
       * Receive notification of a skipped entity.
       * We do not handle this method, and the input is quietly ignored
       */
      public void skippedEntity(String name) {
  	// Not handled by DOMBuilder - ignored
      }
  
      /**
       * Implements org.xml.sax.ContentHandler.startPrefixMapping()
       * Begin the scope of a prefix-URI Namespace mapping.
       */
      public void startPrefixMapping(String prefix, String uri) 
  	throws SAXException {
  	_handler.startPrefixMapping(prefix, uri);
      }
  
      /**
       * Implements org.xml.sax.ContentHandler.endPrefixMapping()
       * End the scope of a prefix-URI Namespace mapping.
       */
      public void endPrefixMapping(String prefix) throws SAXException {
  	_handler.endPrefixMapping(prefix);
      }
  
      /**
       * Implements org.xml.sax.DTDHandler.notationDecl()
       * End the scope of a prefix-URI Namespace mapping.
       * We do not handle this method, and the input is quietly ignored.
       */
      public void notationDecl(String name, String publicId, String systemId) {
  	// Not handled by DTDMonitor - ignored
      }
  
      /**
       * Implements org.xml.sax.DTDHandler.unparsedEntityDecl()
       * End the scope of a prefix-URI Namespace mapping.
       */
      public void unparsedEntityDecl(String name, String publicId,
  				   String systemId, String notationName)
  	throws SAXException {
  	// Create new contained for unparsed entities
  	if (_dtd == null) _dtd = new DTDMonitor();
  	_dtd.unparsedEntityDecl(name, publicId, systemId, notationName);
      }
  
      /**
       * Implements org.xml.sax.ext.LexicalHandler.startDTD()
       * We do not handle this method, and the input is quietly ignored
       */
      public void startDTD(String name, String publicId, String systemId) { }
  
      /**
       * Implements org.xml.sax.ext.LexicalHandler.endDTD()
       * We do not handle this method, and the input is quietly ignored
       */
      public void endDTD() { }
  
      /**
       * Implements org.xml.sax.ext.LexicalHandler.startEntity()
       * We do not handle this method, and the input is quietly ignored
       */
      public void startEntity(String name) { }
  
      /**
       * Implements org.xml.sax.ext.LexicalHandler.endEntity()
       * We do not handle this method, and the input is quietly ignored
       */
      public void endEntity(String name) { }
  
      /**
       * Implements org.xml.sax.ext.LexicalHandler.startCDATA()
       * We do not handle this method, and the input is quietly ignored
       */
      public void startCDATA() { }
  
      /**
       * Implements org.xml.sax.ext.LexicalHandler.endCDATA()
       * We do not handle this method, and the input is quietly ignored
       */
      public void endCDATA() { }
  
      /**
       * Implements org.xml.sax.ext.LexicalHandler.comment()
       * We do not handle this method, and the input is quietly ignored
       */
      public void comment(char[] ch, int start, int length) { }
  
  }
  
  
  

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