bodewig 02/04/23 04:42:51
Modified: src/main/org/apache/tools/ant/helper ProjectHelperImpl.java
src/main/org/apache/tools/ant/taskdefs/optional
XMLValidateTask.java
Added: src/main/org/apache/tools/ant/util JAXPUtils.java
Log:
Move JAXP stuff into a new utility class.
Revision Changes Path
1.7 +5 -35 jakarta-ant/src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java
Index: ProjectHelperImpl.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/helper/ProjectHelperImpl.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ProjectHelperImpl.java 21 Apr 2002 13:42:03 -0000 1.6
+++ ProjectHelperImpl.java 23 Apr 2002 11:42:51 -0000 1.7
@@ -63,15 +63,11 @@
import org.xml.sax.Locator;
import org.xml.sax.InputSource;
import org.xml.sax.HandlerBase;
-import org.xml.sax.SAXParseException;
import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
import org.xml.sax.DocumentHandler;
import org.xml.sax.AttributeList;
import org.xml.sax.helpers.XMLReaderAdapter;
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.FactoryConfigurationError;
import org.apache.tools.ant.ProjectHelper;
import org.apache.tools.ant.UnknownElement;
import org.apache.tools.ant.Project;
@@ -83,6 +79,7 @@
import org.apache.tools.ant.TaskContainer;
import org.apache.tools.ant.Location;
import org.apache.tools.ant.TaskAdapter;
+import org.apache.tools.ant.util.JAXPUtils;
/**
* Original helper.
@@ -92,12 +89,6 @@
public class ProjectHelperImpl extends ProjectHelper {
/**
- * Parser factory to use to create parsers.
- * @see #getParserFactory
- */
- private static SAXParserFactory parserFactory = null;
-
- /**
* SAX 1 style parser used to parse the given file. This may
* in fact be a SAX 2 XMLReader wrapped in an XMLReaderAdapter.
*/
@@ -139,11 +130,10 @@
buildFileParent = new File(this.buildFile.getParent());
try {
- SAXParser saxParser = getParserFactory().newSAXParser();
try {
- parser = saxParser.getParser();
- } catch (SAXException exc) {
- parser = new XMLReaderAdapter(saxParser.getXMLReader());
+ parser = JAXPUtils.getParser();
+ } catch (BuildException e) {
+ parser = new XMLReaderAdapter(JAXPUtils.getXMLReader());
}
@@ -163,11 +153,6 @@
parser.setErrorHandler(hb);
parser.setDTDHandler(hb);
parser.parse(inputSource);
- } catch (ParserConfigurationException exc) {
- throw new BuildException("Parser has not been configured correctly", exc);
- } catch (FactoryConfigurationError e) {
- throw new BuildException("XML parser has not been configured "
- + "correctly: " + e.getMessage(), e);
} catch (SAXParseException exc) {
Location location =
new Location(buildFile.toString(), exc.getLineNumber(),
@@ -1149,21 +1134,6 @@
public void startElement(String name, AttributeList attrs) throws SAXParseException
{
new NestedElementHandler(helperImpl, this, element, wrapper, target).init(name,
attrs);
}
- }
-
- /**
- * Returns the parser factory to use. Only one parser
- * factory is ever created by this method (multi-threading
- * issues aside) and is then cached for future use.
- *
- * @return a SAXParserFactory to use within this class
- */
- private static SAXParserFactory getParserFactory() {
- if (parserFactory == null) {
- parserFactory = SAXParserFactory.newInstance();
- }
-
- return parserFactory;
}
/**
1.19 +4 -38 jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java
Index: XMLValidateTask.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/XMLValidateTask.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- XMLValidateTask.java 22 Apr 2002 08:56:13 -0000 1.18
+++ XMLValidateTask.java 23 Apr 2002 11:42:51 -0000 1.19
@@ -64,10 +64,6 @@
import java.util.Vector;
import java.util.Hashtable;
import java.util.Enumeration;
-import javax.xml.parsers.SAXParserFactory;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.FactoryConfigurationError;
import org.apache.tools.ant.AntClassLoader;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
@@ -78,6 +74,7 @@
import org.apache.tools.ant.types.Reference;
import org.apache.tools.ant.types.XMLCatalog;
import org.apache.tools.ant.types.DTDLocation;
+import org.apache.tools.ant.util.JAXPUtils;
import org.xml.sax.XMLReader;
import org.xml.sax.EntityResolver;
import org.xml.sax.Parser;
@@ -96,12 +93,6 @@
*/
public class XMLValidateTask extends Task {
- /**
- * Parser factory to use to create parsers.
- * @see #getParserFactory
- */
- private static SAXParserFactory parserFactory = null;
-
protected static String INIT_FAILED_MSG =
"Could not start xml validation: ";
@@ -294,20 +285,10 @@
Object reader = null;
if (readerClassName == null) {
- // use JAXP
try {
- SAXParser saxParser = getParserFactory().newSAXParser();
- try {
- reader = saxParser.getXMLReader();
- } catch (SAXException exc) {
- reader = saxParser.getParser();
- }
- } catch (ParserConfigurationException e) {
- throw new BuildException(INIT_FAILED_MSG + e.getMessage(),
- e, getLocation());
- } catch (SAXException e) {
- throw new BuildException(INIT_FAILED_MSG + e.getMessage(),
- e, getLocation());
+ reader = JAXPUtils.getXMLReader();
+ } catch (BuildException exc) {
+ reader = JAXPUtils.getParser();
}
} else {
@@ -370,21 +351,6 @@
setFeature(featureId, ((Boolean) features.get(featureId)).booleanValue(),
true);
}
}
- }
-
- /**
- * Returns the parser factory to use. Only one parser
- * factory is ever created by this method (multi-threading
- * issues aside) and is then cached for future use.
- *
- * @return a SAXParserFactory to use within this class
- */
- private static SAXParserFactory getParserFactory() {
- if (parserFactory == null) {
- parserFactory = SAXParserFactory.newInstance();
- }
-
- return parserFactory;
}
/*
1.1 jakarta-ant/src/main/org/apache/tools/ant/util/JAXPUtils.java
Index: JAXPUtils.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 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 acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", 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 names without prior written
* permission of the Apache Group.
*
* 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. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.util;
import org.apache.tools.ant.BuildException;
import org.xml.sax.Parser;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.FactoryConfigurationError;
/**
* Collection of helper methods that retrieve a ParserFactory or
* Parsers and Readers.
*
* <p>This class will create only a single factory instance.</p>
*
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*
* @since Ant 1.5
*/
public class JAXPUtils {
/**
* Parser factory to use to create parsers.
* @see #getParserFactory
*
* @since Ant 1.5
*/
private static SAXParserFactory parserFactory = null;
/**
* Returns the parser factory to use. Only one parser factory is
* ever created by this method and is then cached for future use.
*
* @return a SAXParserFactory to use
*
* @since Ant 1.5
*/
public synchronized static SAXParserFactory getParserFactory()
throws BuildException {
if (parserFactory == null) {
parserFactory = newParserFactory();
}
return parserFactory;
}
/**
* Returns a new parser factory instance.
*
* @since Ant 1.5
*/
public static SAXParserFactory newParserFactory() throws BuildException {
try {
return SAXParserFactory.newInstance();
} catch (FactoryConfigurationError e) {
throw new BuildException("XML parser factory has not been "
+ "configured correctly: "
+ e.getMessage(), e);
}
}
/**
* Returns a newly created SAX 1 Parser, using the default parser
* factory.
*
* @return a SAX 1 Parser.
* @see #getParserFactory
* @since Ant 1.5
*/
public static Parser getParser() throws BuildException {
try {
return newSAXParser().getParser();
} catch (SAXException e) {
throw convertToBuildException(e);
}
}
/**
* Returns a newly created SAX 2 XMLReader, using the default parser
* factory.
*
* @return a SAX 2 XMLReader.
* @see #getParserFactory
* @since Ant 1.5
*/
public static XMLReader getXMLReader() throws BuildException {
try {
return newSAXParser().getXMLReader();
} catch (SAXException e) {
throw convertToBuildException(e);
}
}
/**
* @return a new SAXParser instance as helper for getParser and
* getXMLReader.
*
* @since Ant 1.5
*/
private static SAXParser newSAXParser() throws BuildException {
try {
return getParserFactory().newSAXParser();
} catch (ParserConfigurationException e) {
throw new BuildException("Cannot create parser for the given "
+ "configuration: " + e.getMessage(), e);
} catch (SAXException e) {
throw convertToBuildException(e);
}
}
/**
* Translate a SAXException into a BuildException
*
* @since Ant 1.5
*/
private static BuildException convertToBuildException(SAXException e) {
Exception nested = e.getException();
if (nested != null) {
return new BuildException(nested);
} else {
return new BuildException(e);
}
}
}
--
To unsubscribe, e-mail: <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>
|