001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *     http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018package org.apache.commons.jxpath.xml;
019
020import java.io.InputStream;
021
022import javax.xml.parsers.DocumentBuilderFactory;
023
024import org.apache.commons.jxpath.JXPathException;
025
026/**
027 * An implementation of the XMLParser interface that produces a DOM Document.
028 */
029public class DOMParser extends XMLParser2 {
030
031    /**
032     * Constructs a new instance.
033     */
034    public DOMParser() {
035        // empty
036    }
037
038    @Override
039    public Object parseXML(final InputStream stream) {
040        try {
041            final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
042            factory.setValidating(isValidating());
043            factory.setNamespaceAware(isNamespaceAware());
044            factory.setIgnoringElementContentWhitespace(isIgnoringElementContentWhitespace());
045            factory.setExpandEntityReferences(isExpandEntityReferences());
046            factory.setIgnoringComments(isIgnoringComments());
047            factory.setCoalescing(isCoalescing());
048            return factory.newDocumentBuilder().parse(stream);
049        } catch (final Exception ex) {
050            throw new JXPathException("DOM parser error", ex);
051        }
052    }
053}