sanjiva 2002/10/28 08:37:02 Modified: java/src/org/apache/soap/util/xml XMLParserUtils.java Log: added logic to share instances of DocumentBuilders on a per-thread basis Revision Changes Path 1.6 +16 -7 xml-soap/java/src/org/apache/soap/util/xml/XMLParserUtils.java Index: XMLParserUtils.java =================================================================== RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/util/xml/XMLParserUtils.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- XMLParserUtils.java 17 May 2002 18:11:57 -0000 1.5 +++ XMLParserUtils.java 28 Oct 2002 16:37:02 -0000 1.6 @@ -57,7 +57,7 @@ package org.apache.soap.util.xml; -// JAXP packages +import java.util.HashMap; import javax.xml.parsers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; @@ -73,6 +73,7 @@ */ public class XMLParserUtils { private static DocumentBuilderFactory dbf = null; + private static HashMap docBuilderTable = new HashMap (); static { // Create a default instance. @@ -132,12 +133,20 @@ */ synchronized public static DocumentBuilder getXMLDocBuilder() throws IllegalArgumentException { - // Step 2: create a DocumentBuilder that satisfies the constraints - // specified by the DocumentBuilderFactory - try { - return dbf.newDocumentBuilder(); - } catch (ParserConfigurationException pce) { - throw new IllegalArgumentException(pce.toString()); + // if a document builder has already been created for this thread + // then just reuse that. otherwise create a new one and remember it. + Thread t = Thread.currentThread (); + DocumentBuilder db = (DocumentBuilder) docBuilderTable.get (t); + if (db != null) { + return db; + } else { + try { + db = dbf.newDocumentBuilder(); + docBuilderTable.put (t, db); + return db; + } catch (ParserConfigurationException pce) { + throw new IllegalArgumentException(pce.toString()); + } } } }
-- To unsubscribe, e-mail: <mailto:soap-dev-unsubscribe@;xml.apache.org> For additional commands, e-mail: <mailto:soap-dev-help@;xml.apache.org>