You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by bl...@apache.org on 2001/05/11 15:45:10 UTC

cvs commit: xml-cocoon2/src/org/apache/cocoon/components/parser XercesParser.java

bloritsch    01/05/11 06:45:09

  Added:       src/org/apache/cocoon/components/parser XercesParser.java
  Log:
  Reimplement XercesParser so that environments with old JAXP implementations
  won't stop people from using Cocoon.
  
  Revision  Changes    Path
  1.1                  xml-cocoon2/src/org/apache/cocoon/components/parser/XercesParser.java
  
  Index: XercesParser.java
  ===================================================================
  /*****************************************************************************
   * Copyright (C) The Apache Software Foundation. All rights reserved.        *
   * ------------------------------------------------------------------------- *
   * This software is published under the terms of the Apache Software License *
   * version 1.1, a copy of which has been included  with this distribution in *
   * the LICENSE file.                                                         *
   *****************************************************************************/
  package org.apache.cocoon.components.parser;
  
  import java.io.IOException;
  import org.apache.avalon.framework.thread.SingleThreaded;
  import org.apache.cocoon.xml.AbstractXMLProducer;
  import org.apache.xerces.dom.DocumentImpl;
  import org.apache.xerces.dom.DocumentTypeImpl;
  import org.apache.xerces.parsers.DOMParser;
  import org.apache.xerces.parsers.SAXParser;
  import org.xml.sax.ErrorHandler;
  import org.xml.sax.InputSource;
  import org.xml.sax.SAXException;
  import org.xml.sax.SAXParseException;
  import org.xml.sax.XMLReader;
  import org.w3c.dom.Document;
  
  /**
   *
   * @author <a href="mailto:fumagalli@exoffice.com">Pierpaolo Fumagalli</a>
   *         (Apache Software Foundation, Exoffice Technologies)
   * @version CVS $Revision: 1.1 $ $Date: 2001/05/11 13:45:09 $
   */
  public class XercesParser extends AbstractXMLProducer
  implements Parser, ErrorHandler, SingleThreaded {
  
      final SAXParser parser;
  
      public XercesParser ()
      throws SAXException {
          this.parser = new SAXParser();
  
          this.parser.setFeature("http://xml.org/sax/features/validation",false);
          this.parser.setFeature("http://xml.org/sax/features/namespaces",true);
          this.parser.setFeature("http://xml.org/sax/features/namespace-prefixes",
                            true);
      }
  
      public void parse(InputSource in)
      throws SAXException, IOException {
        this.parser.setProperty("http://xml.org/sax/properties/lexical-handler",
                                super.lexicalHandler);
          this.parser.setErrorHandler(this);
          this.parser.setContentHandler(super.contentHandler);
          this.parser.parse(in);
      }
  
      /**
       * Create a new Document object.
       */
      public Document newDocument() {
          return(newDocument(null,null,null));
      }
  
      /**
       * Create a new Document object with a specified DOCTYPE.
       */
      public Document newDocument(String name) {
          return(newDocument(name,null,null));
      }
  
      /**
       * Create a new Document object with a specified DOCTYPE, public ID and
       * system ID.
       */
      public Document newDocument(String name, String pub, String sys) {
          DocumentImpl doc=new DocumentImpl();
          if ((pub!=null)||(sys!=null)) {
              DocumentTypeImpl dtd=new DocumentTypeImpl(doc,name,pub,sys);
              doc.appendChild(dtd);
          } else if (name!=null) {
              DocumentTypeImpl dtd=new DocumentTypeImpl(doc,name);
              doc.appendChild(dtd);
          }
          return(doc);
      }
  
      /**
       * Parses a new Document object from the given InputSource.
       */
      public Document parseDocument(InputSource input) throws SAXException, IOException {
          DOMParser parser = null;
  
          try {
              parser = new DOMParser();
  
              parser.setFeature("http://xml.org/sax/features/validation",false);
              parser.setFeature("http://xml.org/sax/features/namespaces",true);
              parser.setFeature("http://xml.org/sax/features/namespace-prefixes",
                                true);
  
              parser.parse(input);
          } catch (Exception pce) {
              getLogger().error("Could not build DocumentBuilder", pce);
              return null;
          }
  
          return parser.getDocument();
      }
  
      /**
       * Receive notification of a recoverable error.
       */
      public void error(SAXParseException e)
      throws SAXException {
          throw new SAXException("Error parsing "+e.getSystemId()+" (line "+
                                 e.getLineNumber()+" col. "+e.getColumnNumber()+
                                 "): "+e.getMessage(),e);
      }
  
      /**
       * Receive notification of a fatal error.
       */
      public void fatalError(SAXParseException e)
      throws SAXException {
          throw new SAXException("Fatal error parsing "+e.getSystemId()+" (line "+
                                 e.getLineNumber()+" col. "+e.getColumnNumber()+
                                 "): "+e.getMessage(),e);
      }
  
      /**
       * Receive notification of a warning.
       */
      public void warning(SAXParseException e)
      throws SAXException {
          throw new SAXException("Warning parsing "+e.getSystemId()+" (line "+
                                 e.getLineNumber()+" col. "+e.getColumnNumber()+
                                 "): "+e.getMessage(),e);
      }
  }
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org