From 58243ff3cad073116c0dc140ec580d99ea635344 Mon Sep 17 00:00:00 2001 From: Steffen Pingel Date: Mon, 29 Apr 2013 18:52:00 +0200 Subject: 406647: use SAXParserFactory instead of XMLReaderFactory * SAXParserFactory does not statically cache discovered classes Change-Id: Ib040ce847a2f17a0f675c296081e62d8df61bf16 Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=406647 --- .../tasks/core/TaskRepositoriesExternalizer.java | 27 ++++++++++++++++++++-- .../tasks/core/data/TaskDataExternalizer.java | 11 ++------- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskRepositoriesExternalizer.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskRepositoriesExternalizer.java index 6eb633bcc..dc94e4bb5 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskRepositoriesExternalizer.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/TaskRepositoriesExternalizer.java @@ -23,13 +23,17 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.xml.sax.InputSource; +import org.xml.sax.SAXException; import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; /** * @author Rob Elves @@ -112,7 +116,7 @@ public class TaskRepositoriesExternalizer { } SaxRepositoriesContentHandler contentHandler = new SaxRepositoriesContentHandler(); - XMLReader reader = XMLReaderFactory.createXMLReader(); + XMLReader reader = TaskRepositoriesExternalizer.createXmlReader(); reader.setContentHandler(contentHandler); reader.parse(new InputSource(inputStream)); return contentHandler.getRepositories(); @@ -132,4 +136,23 @@ public class TaskRepositoriesExternalizer { } } } + + public static XMLReader createXmlReader() throws SAXException { + try { + // use Xerces to ensure XML 1.1 is handled correctly + Class clazz = Class.forName("org.apache.xerces.parsers.SAXParser"); //$NON-NLS-1$ + return (XMLReader) clazz.newInstance(); + } catch (Throwable e) { + SAXParser saxParser; + try { + SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); + saxParserFactory.setNamespaceAware(true); + saxParser = saxParserFactory.newSAXParser(); + } catch (ParserConfigurationException e2) { + throw new SAXException(e2); + } + return saxParser.getXMLReader(); + } + } + } diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/data/TaskDataExternalizer.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/data/TaskDataExternalizer.java index c73f1156e..f0d8308a4 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/data/TaskDataExternalizer.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/data/TaskDataExternalizer.java @@ -27,6 +27,7 @@ import javax.xml.transform.stream.StreamResult; import org.eclipse.core.runtime.ISafeRunnable; import org.eclipse.core.runtime.SafeRunner; +import org.eclipse.mylyn.internal.tasks.core.TaskRepositoriesExternalizer; import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; import org.eclipse.mylyn.tasks.core.IRepositoryManager; import org.eclipse.mylyn.tasks.core.TaskRepository; @@ -36,7 +37,6 @@ import org.eclipse.mylyn.tasks.core.data.TaskData; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; /** * @author Steffen Pingel @@ -177,14 +177,7 @@ public class TaskDataExternalizer { } public TaskDataState readState(InputStream in) throws IOException, SAXException { - XMLReader parser; - try { - // use Xerces to ensure XML 1.1 is handled correctly - Class clazz = Class.forName("org.apache.xerces.parsers.SAXParser"); //$NON-NLS-1$ - parser = (XMLReader) clazz.newInstance(); - } catch (Throwable e) { - parser = XMLReaderFactory.createXMLReader(); - } + XMLReader parser = TaskRepositoriesExternalizer.createXmlReader(); TaskDataStateReader handler = new TaskDataStateReader(taskRepositoryManager); parser.setContentHandler(handler); parser.parse(new InputSource(in)); -- cgit v1.2.3