diff --git a/shared/src/main/scala/scala/xml/factory/XMLLoader.scala b/shared/src/main/scala/scala/xml/factory/XMLLoader.scala index 5f60acc2a..497ba8c9a 100644 --- a/shared/src/main/scala/scala/xml/factory/XMLLoader.scala +++ b/shared/src/main/scala/scala/xml/factory/XMLLoader.scala @@ -27,13 +27,18 @@ trait XMLLoader[T <: Node] { import scala.xml.Source._ def adapter: FactoryAdapter = new NoBindingFactoryAdapter() - /* Override this to use a different SAXParser. */ - def parser: SAXParser = { - val f = SAXParserFactory.newInstance() - f.setNamespaceAware(false) - f.newSAXParser() + private lazy val parserInstance = new ThreadLocal[SAXParser] { + override def initialValue = { + val parser = SAXParserFactory.newInstance() + + parser.setNamespaceAware(false) + parser.newSAXParser() + } } + /* Override this to use a different SAXParser. */ + def parser: SAXParser = parserInstance.get + /** * Loads XML from the given InputSource, using the supplied parser. * The methods available in scala.xml.XML use the XML parser in the JDK. @@ -62,4 +67,4 @@ trait XMLLoader[T <: Node] { /** Loads XML from the given String. */ def loadString(string: String): T = loadXML(fromString(string), parser) -} +} \ No newline at end of file