001 /*
002 // $Id: //open/util/resgen/src/org/eigenbase/xom/wrappers/JaxpDOMParser.java#3 $
003 // Package org.eigenbase.xom is an XML Object Mapper.
004 // Copyright (C) 2005-2005 The Eigenbase Project
005 // Copyright (C) 2005-2005 Disruptive Tech
006 // Copyright (C) 2005-2005 LucidEra, Inc.
007 // Portions Copyright (C) 2001-2005 Kana Software, Inc. and others.
008 //
009 // This library is free software; you can redistribute it and/or modify it
010 // under the terms of the GNU Lesser General Public License as published by the
011 // Free Software Foundation; either version 2 of the License, or (at your
012 // option) any later version approved by The Eigenbase Project.
013 //
014 // This library is distributed in the hope that it will be useful,
015 // but WITHOUT ANY WARRANTY; without even the implied warranty of
016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
017 // GNU Lesser General Public License for more details.
018 //
019 // You should have received a copy of the GNU Lesser General Public License
020 // along with this library; if not, write to the Free Software
021 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
022 */
023
024 package org.eigenbase.xom.wrappers;
025
026 import org.eigenbase.xom.XOMException;
027 import org.w3c.dom.Document;
028 import org.xml.sax.InputSource;
029 import org.xml.sax.SAXException;
030
031 import javax.xml.parsers.DocumentBuilder;
032 import javax.xml.parsers.DocumentBuilderFactory;
033 import javax.xml.parsers.FactoryConfigurationError;
034 import javax.xml.parsers.ParserConfigurationException;
035 import java.io.IOException;
036
037 /**
038 * A <code>JaxpDOMParser</code> implements {@link org.eigenbase.xom.Parser} using
039 * a {@link DocumentBuilder JAXP-compliant parser}.
040 *
041 * @author jhyde
042 * @since Aug 29, 2002
043 * @version $Id: //open/util/resgen/src/org/eigenbase/xom/wrappers/JaxpDOMParser.java#3 $
044 **/
045 public class JaxpDOMParser extends GenericDOMParser {
046 private DocumentBuilder builder;
047
048 /** Creates a non-validating parser. **/
049 public JaxpDOMParser() throws XOMException {
050 this(false);
051 }
052
053 /** Creates a parser. **/
054 public JaxpDOMParser(boolean validating) throws XOMException {
055 try {
056 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
057 factory.setValidating(validating);
058 try {
059 factory.setAttribute(VALIDATION_FEATURE, new Boolean(validating));
060 factory.setAttribute(LOAD_EXTERNAL_DTD_FEATURE, new Boolean(validating));
061 } catch (IllegalArgumentException e) {
062 // Weblogic 6.1's parser complains 'No arguments are
063 // implemented'
064 }
065 builder = factory.newDocumentBuilder();
066 } catch (ParserConfigurationException e) {
067 throw new XOMException(e, "Error creating parser");
068 } catch (FactoryConfigurationError e) {
069 throw new XOMException(e, "Error creating parser");
070 }
071 builder.setErrorHandler(this);
072 document = builder.newDocument();
073 }
074
075 protected Document parseInputSource(InputSource in) throws XOMException {
076 prepareParse();
077 try {
078 Document document = builder.parse(in);
079 handleErrors();
080 return document;
081 } catch (SAXException e) {
082 // Display any pending errors
083 handleErrors();
084 throw new XOMException(e, "Document parse failed");
085 } catch (IOException e) {
086 // Display any pending errors
087 handleErrors();
088 throw new XOMException(e, "Document parse failed");
089 }
090 }
091 }
092
093 // End JaxpDOMParser.java