Package org.apache.xerces.parsers

Source Code of org.apache.xerces.parsers.DOMBuilderImpl

/*
* The Apache Software License, Version 1.1
*
*
* Copyright (c) 2000,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 "Xerces" 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, International
* Business Machines, Inc., http://www.apache.org.  For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/

package org.apache.xerces.parsers;

import java.io.InputStream;
import java.io.IOException;
import java.io.Reader;
import java.util.Hashtable;
import java.util.Stack;
import java.util.Vector;

import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;

import org.apache.xerces.dom3.DOMErrorHandler;
import org.apache.xerces.dom3.ls.DOMBuilder;
import org.apache.xerces.dom3.ls.DOMEntityResolver;
import org.apache.xerces.dom3.ls.DOMBuilderFilter;
import org.apache.xerces.dom3.ls.DOMInputSource;

import org.apache.xerces.util.DOMEntityResolverWrapper;
import org.apache.xerces.util.SymbolTable;
import org.apache.xerces.util.DOMErrorHandlerWrapper;
import org.apache.xerces.impl.Constants;
import org.apache.xerces.impl.validation.GrammarPool;
import org.apache.xerces.xni.XNIException;
import org.apache.xerces.xni.parser.XMLConfigurationException;
import org.apache.xerces.xni.parser.XMLInputSource;
import org.apache.xerces.xni.parser.XMLParserConfiguration;


/**
* This is Xerces DOM Builder class. It uses the abstract DOM
* parser with a document scanner, a dtd scanner, and a validator, as
* well as a grammar pool.
*
* @author Pavani Mukthipudi, Sun Microsystems Inc.
* @author Elena Litani, IBM
* @author Rahul Srivastava, Sun Microsystems Inc.
*
*/

// REVISIT:
// 1. "load-as-infoset" should be implemented
// 2. why do we need so many fields in this class (why don't we use AbstractDomParser fields)
// 3. implementation of setFeature method (we are going via switch several times)
// 4. include-comments - I've defined a constant for DOM feature in Constants.
//    I don't think we need to define corresponding feature for Xerces parser
//    (with Xerces prefix).
//    We probably should define all DOM Feature constants in Constants.java
//  --el
public class DOMBuilderImpl
    extends AbstractDOMParser implements DOMBuilder {
   
    //
    // Constants
    //

    // feature ids

    /** Feature id: namespace declarations. */
    protected static final String NAMESPACE_DECLARATIONS =
        "namespace-declarations";
       
    /** Feature id: validation. */
    protected static final String VALIDATION =
        "validation";
       
    /** Feature id: external parameter entities. */
    protected static final String EXTERNAL_PARAMETER_ENTITIES =
        "external-parameter-entities";
       
    /** Feature id: external general entities. */
    protected static final String EXTERNAL_GENERAL_ENTITIES =
        "external-general-entities";
       
    /** Feature id: external dtd subset. */
    protected static final String EXTERNAL_DTD_SUBSET =
        "external-dtd-subset";
       
    /** Feature id: validate if schema. */
    protected static final String VALIDATE_IF_SCHEMA =
        "validate-if-schema";
       
    /** Feature id: validate against dtd. */
    protected static final String VALIDATE_AGAINST_DTD =
        "validate-against-dtd"
       
    /** Feature id: datatype normalization. */
    protected static final String DATATYPE_NORMALIZATION =
        "datatype-normalization";
       
    /** Feature id: create entity ref nodes. */
    protected static final String CREATE_ENTITY_REFERENCE_NODES =
        "create-entity-ref-nodes";
       
    /** Feature id: create entity nodes. */
    protected static final String CREATE_ENTITY_NODES =
        "create-entity-nodes";
          
    /** Feature id: whitespace in element content. */
    protected static final String WHITESPACE_IN_ELEMENT_CONTENT =
        "whitespace-in-element-content";
   
    /** Feature id: comments. */
    protected static final String COMMENTS =
        "comments"
       
    /** Feature id: charset overrides xml encoding. */
    protected static final String CHARSET_OVERRIDES_XML_ENCODING =
        "charset-overrides-xml-encoding"
       
    /** Feature id: load as infoset. */
    protected static final String LOAD_AS_INFOSET =
        "load-as-infoset"
       
    /** Feature id: supported mediatypes only. */
    protected static final String SUPPORTED_MEDIATYPES_ONLY =
        "supported-mediatypes-only";
       
    // SAX & Xerces feature ids

    /** Feature id: validation. */
    protected static final String VALIDATION_FEATURE =
        Constants.SAX_FEATURE_PREFIX+Constants.VALIDATION_FEATURE;
       
    /** Feature id: external parameter entities. */
    protected static final String EXTERNAL_PARAMETER_ENTITIES_FEATURE =
        Constants.SAX_FEATURE_PREFIX+Constants.EXTERNAL_PARAMETER_ENTITIES_FEATURE;
       
    /** Feature id: external general entities. */
    protected static final String EXTERNAL_GENERAL_ENTITIES_FEATURE =
        Constants.SAX_FEATURE_PREFIX+Constants.EXTERNAL_GENERAL_ENTITIES_FEATURE;
       
    /** Feature id: load external dtd. */
    protected static final String LOAD_EXTERNAL_DTD_FEATURE =
        Constants.XERCES_FEATURE_PREFIX+Constants.LOAD_EXTERNAL_DTD_FEATURE;
       
    //
    // Data
    //
   
    // features

    /** Namespace declarations. */
    protected boolean fNamespaceDeclarations;
   
    /** Validate if schema */
    protected boolean fValidateIfSchema;
   
    /** Validate against DTD */
    protected boolean fValidateAgainstDTD;
   
    /** Datatype normalization */
    protected boolean fDatatypeNormalization;
   
    /** Create entity nodes */
    protected boolean fCreateEntityNodes;
       
    /** Whitespace in element content */
    protected boolean fWhitespaceInElementContent;
   
    /** Charset overrides xml encoding */
    protected boolean fCharsetOverridesXmlEncoding;
   
    /** Load as infoset */
    protected boolean fLoadAsInfoset;
   
    /** Supported mediatypes only */
    protected boolean fSupportedMediatypesOnly;
   
    //
    // Constructors
    //

    /**
     * Constructs a DOM Builder using the dtd/xml schema parser configuration.
     */
    public DOMBuilderImpl() {
        this(new DTDXSParserConfiguration());
    } // <init>

    /**
     * Constructs a DOM Builder using the specified parser configuration.
     */
    public DOMBuilderImpl(XMLParserConfiguration config) {
        super(config);
       
        // add recognized features
        final String[] domRecognizedFeatures = {
            NAMESPACE_DECLARATIONS,
            VALIDATE_IF_SCHEMA,
            VALIDATE_AGAINST_DTD,
            DATATYPE_NORMALIZATION,
            CREATE_ENTITY_NODES,
            WHITESPACE_IN_ELEMENT_CONTENT,
            CHARSET_OVERRIDES_XML_ENCODING,
            LOAD_AS_INFOSET,
            SUPPORTED_MEDIATYPES_ONLY
        };
       
        fConfiguration.addRecognizedFeatures(domRecognizedFeatures);

        // set default values
        fConfiguration.setFeature(NAMESPACE_DECLARATIONS, true);
        fConfiguration.setFeature(VALIDATE_IF_SCHEMA, false);
        fConfiguration.setFeature(VALIDATE_AGAINST_DTD, false);
        fConfiguration.setFeature(DATATYPE_NORMALIZATION, false);
        fConfiguration.setFeature(CREATE_ENTITY_NODES, true);
        fConfiguration.setFeature(WHITESPACE_IN_ELEMENT_CONTENT, true);
        fConfiguration.setFeature(CHARSET_OVERRIDES_XML_ENCODING, true);
        fConfiguration.setFeature(LOAD_AS_INFOSET, false);
        fConfiguration.setFeature(SUPPORTED_MEDIATYPES_ONLY, false);
       
    } // <init>(XMLParserConfiguration)
   
    /**
     * Constructs a DOM Builder using the specified symbol table.
     */
    public DOMBuilderImpl(SymbolTable symbolTable) {
        this(new DTDXSParserConfiguration(symbolTable));
    } // <init>(SymbolTable)


    /**
     * Constructs a DOM Builder using the specified symbol table and
     * grammar pool.
     */
    public DOMBuilderImpl(SymbolTable symbolTable, GrammarPool grammarPool) {
        this(new DTDXSParserConfiguration(symbolTable, grammarPool));
    }
   
    /**
     * Resets the parser state.
     *
     * @throws SAXException Thrown on initialization error.
     */
    public void reset() {
        super.reset();
  try {
            fNamespaceDeclarations = fConfiguration.getFeature(NAMESPACE_DECLARATIONS);
            fValidateIfSchema = fConfiguration.getFeature(VALIDATE_IF_SCHEMA);
            fValidateAgainstDTD = fConfiguration.getFeature(VALIDATE_AGAINST_DTD);
            fDatatypeNormalization = fConfiguration.getFeature(DATATYPE_NORMALIZATION);
            fWhitespaceInElementContent = fConfiguration.getFeature(WHITESPACE_IN_ELEMENT_CONTENT);
            fCharsetOverridesXmlEncoding = fConfiguration.getFeature(CHARSET_OVERRIDES_XML_ENCODING);
            fLoadAsInfoset = fConfiguration.getFeature(LOAD_AS_INFOSET);
            fSupportedMediatypesOnly = fConfiguration.getFeature(SUPPORTED_MEDIATYPES_ONLY);
        }
        catch (XMLConfigurationException e) {
            if (e.getType() == XMLConfigurationException.NOT_RECOGNIZED) {
                throw new DOMException(DOMException.NOT_FOUND_ERR, e.getMessage());
            }
            else {
                throw new DOMException(DOMException.NOT_SUPPORTED_ERR, e.getMessage());
            }
        }

    } // reset()
   
    //
    // DOMBuilder methods
    //

    /**
     * If a <code>DOMEntityResolver</code> has been specified, each time a
     * reference to an external entity is encountered the
     * <code>DOMBuilder</code> will pass the public and system IDs to the
     * entity resolver, which can then specify the actual source of the
     * entity.
     */
    public DOMEntityResolver getEntityResolver() {
      DOMEntityResolver domEntityResolver = null;
        try {
            DOMEntityResolver entityResolver = (DOMEntityResolver)fConfiguration.getProperty(ENTITY_RESOLVER);
            if (entityResolver != null &&
                entityResolver instanceof DOMEntityResolverWrapper) {
                domEntityResolver = ((DOMEntityResolverWrapper)entityResolver).getEntityResolver();
            }
        }
        catch (XMLConfigurationException e) {
           
        }
        return domEntityResolver;
    }
   
    /**
     * If a <code>DOMEntityResolver</code> has been specified, each time a
     * reference to an external entity is encountered the
     * <code>DOMBuilder</code> will pass the public and system IDs to the
     * entity resolver, which can then specify the actual source of the
     * entity.
     */
    public void setEntityResolver(DOMEntityResolver entityResolver) {
      try {
            fConfiguration.setProperty(ENTITY_RESOLVER,
                    new DOMEntityResolverWrapper(entityResolver));
        }
        catch (XMLConfigurationException e) {
           
        }
    }

    /**
     *  In the event that an error is encountered in the XML document being
     * parsed, the <code>DOMDcoumentBuilder</code> will call back to the
     * <code>errorHandler</code> with the error information. When the
     * document loading process calls the error handler the node closest to
     * where the error occured is passed to the error handler if the
     * implementation, if the implementation is unable to pass the node
     * where the error occures the document Node is passed to the error
     * handler. Mutations to the document from within an error handler will
     * result in implementation dependent behavour.
     */
    public DOMErrorHandler getErrorHandler() {
      DOMErrorHandler errorHandler = null;
        try {
            DOMErrorHandler domErrorHandler =
                (DOMErrorHandler)fConfiguration.getProperty(ERROR_HANDLER);
            if (domErrorHandler != null &&
                domErrorHandler instanceof DOMErrorHandlerWrapper) {
                errorHandler = ((DOMErrorHandlerWrapper)domErrorHandler).getErrorHandler();
            }
        }
        catch (XMLConfigurationException e) {
           
        }
        return errorHandler;
    }
   
    /**
     *  In the event that an error is encountered in the XML document being
     * parsed, the <code>DOMDcoumentBuilder</code> will call back to the
     * <code>errorHandler</code> with the error information. When the
     * document loading process calls the error handler the node closest to
     * where the error occured is passed to the error handler if the
     * implementation, if the implementation is unable to pass the node
     * where the error occures the document Node is passed to the error
     * handler. Mutations to the document from within an error handler will
     * result in implementation dependent behavour.
     */
    public void setErrorHandler(DOMErrorHandler errorHandler) {
      try {
            fConfiguration.setProperty(ERROR_HANDLER,
                                       new DOMErrorHandlerWrapper(errorHandler));
        }
        catch (XMLConfigurationException e) {
           
        }
    }

    /**
     *  When the application provides a filter, the parser will call out to
     * the filter at the completion of the construction of each
     * <code>Element</code> node. The filter implementation can choose to
     * remove the element from the document being constructed (unless the
     * element is the document element) or to terminate the parse early. If
     * the document is being validated when it's loaded the validation
     * happens before the filter is called.
     */
    public DOMBuilderFilter getFilter() {
      throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Not supported");
    }
   
    /**
     *  When the application provides a filter, the parser will call out to
     * the filter at the completion of the construction of each
     * <code>Element</code> node. The filter implementation can choose to
     * remove the element from the document being constructed (unless the
     * element is the document element) or to terminate the parse early. If
     * the document is being validated when it's loaded the validation
     * happens before the filter is called.
     */
    public void setFilter(DOMBuilderFilter filter) {
      throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Not supported");
    }

    /**
     * Set the state of a feature.
     *
     * <br>The feature name has the same form as a DOM hasFeature string.
     * <br>It is possible for a <code>DOMBuilder</code> to recognize a feature
     * name but to be unable to set its value.
     *
     * @param name The feature name.
     * @param state The requested state of the feature (<code>true</code> or
     *   <code>false</code>).
     * @exception DOMException
     *   Raise a NOT_SUPPORTED_ERR exception when the <code>DOMBuilder</code>
     *   recognizes the feature name but cannot set the requested value.
     *   <br>Raise a NOT_FOUND_ERR When the <code>DOMBuilder</code> does not
     *   recognize the feature name.
     */
    public void setFeature(String name, boolean state) throws DOMException {
        try {
          if (canSetFeature(name, state)) {
              if (name.equals(VALIDATION)) {
                  fConfiguration.setFeature(VALIDATION_FEATURE, state);
              }
              else if (name.equals(EXTERNAL_PARAMETER_ENTITIES)) {
                  fConfiguration.setFeature(EXTERNAL_PARAMETER_ENTITIES_FEATURE, state);
              }
              else if (name.equals(EXTERNAL_GENERAL_ENTITIES)) {
                  fConfiguration.setFeature(EXTERNAL_GENERAL_ENTITIES_FEATURE, state);
              }
              else if (name.equals(EXTERNAL_DTD_SUBSET)) {
                  fConfiguration.setFeature(LOAD_EXTERNAL_DTD_FEATURE, state);
              }
              else if (name.equals(COMMENTS)) {
                  fConfiguration.setFeature(INCLUDE_COMMENTS_FEATURE, state);
              }
              else if(name.equals(CREATE_ENTITY_REFERENCE_NODES)) {
                  fConfiguration.setFeature(CREATE_ENTITY_REF_NODES, state);
              }
              else {
                  fConfiguration.setFeature(name, state);
              }
            }
            else {
              throw new DOMException(DOMException.NOT_SUPPORTED_ERR,"Feature \""+name+"\" cannot be set to \""+state+"\"");
            }
        }
        catch (XMLConfigurationException e) {
            if (e.getType() == XMLConfigurationException.NOT_RECOGNIZED) {
                throw new DOMException(DOMException.NOT_FOUND_ERR,"Feature \""+name+"\" not recognized");
            }
            else {
                throw new DOMException(DOMException.NOT_SUPPORTED_ERR,"Feature \""+name+"\" not supported");
            }
        }
    }

    /**
     * Query whether setting a feature to a specific value is supported.
     * <br>The feature name has the same form as a DOM hasFeature string.
     *
     * @param name The feature name, which is a DOM has-feature style string.
     * @param state The requested state of the feature (<code>true</code> or
     *   <code>false</code>).
     * @return <code>true</code> if the feature could be successfully set to
     *   the specified value, or <code>false</code> if the feature is not
     *   recognized or the requested value is not supported. The value of
     *   the feature itself is not changed.
     */
    public boolean canSetFeature(String name, boolean state) {
      if (name.equals(NAMESPACE_DECLARATIONS) && !state) {
          return false;
      }
      else if(name.equals(VALIDATE_IF_SCHEMA) && state) {
          return false;
      }
      else if(name.equals(VALIDATE_AGAINST_DTD) && state) {
          return false;
      }
      else if(name.equals(CREATE_ENTITY_NODES) && !state) {
          return false;
      }
      else if(name.equals(WHITESPACE_IN_ELEMENT_CONTENT) && !state) {
          return false;
      }
      else if(name.equals(LOAD_AS_INFOSET) && state) {
          return false;
      }
      else if(name.equals(SUPPORTED_MEDIATYPES_ONLY) && state) {
          return false;
      }
     
      return true;
    }

    /**
     * Look up the value of a feature.
     * <br>The feature name has the same form as a DOM hasFeature string
     *
     * @param name The feature name, which is a string with DOM has-feature
     *   syntax.
     * @return The current state of the feature (<code>true</code> or
     *   <code>false</code>).
     * @exception DOMException
     *   Raise a NOT_FOUND_ERR When the <code>DOMBuilder</code> does not
     *   recognize the feature name.
     */
    public boolean getFeature(String name) throws DOMException {
      try {
            if (name.equals(VALIDATION)) {
                return fConfiguration.getFeature(VALIDATION_FEATURE);
            }
            else if (name.equals(EXTERNAL_PARAMETER_ENTITIES)) {
                return fConfiguration.getFeature(EXTERNAL_PARAMETER_ENTITIES_FEATURE);
            }
            else if (name.equals(EXTERNAL_GENERAL_ENTITIES)) {
                return fConfiguration.getFeature(EXTERNAL_GENERAL_ENTITIES_FEATURE);
            }
            else if (name.equals(EXTERNAL_DTD_SUBSET)) {
                return fConfiguration.getFeature(LOAD_EXTERNAL_DTD_FEATURE);
            }
            else if (name.equals(COMMENTS)) {
                return fConfiguration.getFeature(INCLUDE_COMMENTS_FEATURE);
            }
            else if(name.equals(CREATE_ENTITY_REFERENCE_NODES)) {
                return fConfiguration.getFeature(CREATE_ENTITY_REF_NODES);
            }
            else {
                return fConfiguration.getFeature(name);
            }
        }
        catch (XMLConfigurationException e) {
            if (e.getType() == XMLConfigurationException.NOT_RECOGNIZED) {
                throw new DOMException(DOMException.NOT_FOUND_ERR,"Feature \""+name+"\" not recognized");
            }
            else {
                throw new DOMException(DOMException.NOT_SUPPORTED_ERR,"Feature \""+name+"\" not supported");
            }
        }
    }
   
    /**
     * Parse an XML document from a location identified by an URI reference.
     * If the URI contains a fragment identifier (see section 4.1 in ), the
     * behavior is not defined by this specification.
     * 
     * @param uri The location of the XML document to be read.
     * @return If the <code>DOMBuilder</code> is a synchronous
     *   <code>DOMBuilder</code> the newly created and populated
     *   <code>Document</code> is returned. If the <code>DOMBuilder</code>
     *   is asynchronous then <code>null</code> is returned since the
     *   document object is not yet parsed when this method returns.
     * @exception DOMSystemException
     *   Exceptions raised by <code>parseURI</code> originate with the
     *   installed ErrorHandler, and thus depend on the implementation of
     *   the <code>DOMErrorHandler</code> interfaces. The default error
     *   handlers will raise a DOMSystemException if any form I/O or other
     *   system error occurs during the parse, but application defined error
     *   handlers are not required to do so.
     */
    public Document parseURI(String uri) throws Exception {
        XMLInputSource source = new XMLInputSource(null, uri, null);
        try {
            parse(source);
        }

        catch (XNIException e) {
            Exception ex = e.getException();
            throw ex;
        }
             
        // close stream opened by the parser
        finally {
            try {
                Reader reader = source.getCharacterStream();
                if (reader != null) {
                    reader.close();
                }
                else {
                    InputStream is = source.getByteStream();
                    if (is != null) {
                        is.close();
                    }
                }
            }
            catch (IOException e) {
                // ignore
            }
        }
        return getDocument();
    }

    /**
     * Parse an XML document from a resource identified by an
     * <code>DOMInputSource</code>.
     *
     * @param is The <code>DOMInputSource</code> from which the source
     *   document is to be read.
     * @return If the <code>DOMBuilder</code> is a synchronous
     *   <code>DOMBuilder</code> the newly created and populated
     *   <code>Document</code> is returned. If the <code>DOMBuilder</code>
     *   is asynchronous then <code>null</code> is returned since the
     *   document object is not yet parsed when this method returns.
     * @exception DOMSystemException
     *   Exceptions raised by <code>parse</code> originate with the installed
     *   ErrorHandler, and thus depend on the implementation of the
     *   <code>DOMErrorHandler</code> interfaces. The default ErrorHandlers
     *   will raise a <code>DOMSystemException</code> if any form I/O or
     *   other system error occurs during the parse, but application defined
     *   ErrorHandlers are not required to do so.
     */
    public Document parse(DOMInputSource is) throws Exception {
     
      try {
            XMLInputSource xmlInputSource =
                new XMLInputSource(is.getPublicId(), is.getSystemId(), is.getBaseURI());
            xmlInputSource.setByteStream(is.getByteStream());
            xmlInputSource.setCharacterStream(is.getCharacterStream());
            xmlInputSource.setEncoding(is.getEncoding());
            parse(xmlInputSource);
        }
        catch (XNIException e) {
            Exception ex = e.getException();
            throw ex;
        }
               
      return getDocument();
    }
                         
    /**
     *  Parse an XML document or fragment from a resource identified by an
     * <code>DOMInputSource</code> and insert the content into an existing
     * document at the position epcified with the <code>contextNode</code>
     * and <code>action</code> arguments. When parsing the input stream the
     * context node is used for resolving unbound namespace prefixes.
     * 
     * @param is  The <code>DOMInputSource</code> from which the source
     *   document is to be read.
     * @param cnode  The <code>Node</code> that is used as the context for
     *   the data that is being parsed.
     * @param action This parameter describes which action should be taken
     *   between the new set of node being inserted and the existing
     *   children of the context node. The set of possible actions is
     *   defined above.
     * @exception DOMException
     *   HIERARCHY_REQUEST_ERR: Thrown if this action results in an invalid
     *   hierarchy (i.e. a Document with more than one document element).
     */
    public void parseWithContext(DOMInputSource is, Node cnode,
                                 short action) throws DOMException {
        // REVISIT: need to implement.
  throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Not supported");
    }
   
       
} // class DOMASBuilderImpl
TOP

Related Classes of org.apache.xerces.parsers.DOMBuilderImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.