Author: alessio.soldano(a)jboss.com
Date: 2009-07-14 13:22:44 -0400 (Tue, 14 Jul 2009)
New Revision: 10322
Modified:
common/trunk/src/main/java/org/jboss/wsf/common/DOMUtils.java
Log:
[JBWS-2554] Prevent concurrent parsing on the same DocumentBuilder instance
Modified: common/trunk/src/main/java/org/jboss/wsf/common/DOMUtils.java
===================================================================
--- common/trunk/src/main/java/org/jboss/wsf/common/DOMUtils.java 2009-07-14 08:20:46 UTC
(rev 10321)
+++ common/trunk/src/main/java/org/jboss/wsf/common/DOMUtils.java 2009-07-14 17:22:44 UTC
(rev 10322)
@@ -26,9 +26,9 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
-import java.util.LinkedList;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -130,7 +130,7 @@
builder.setEntityResolver(entityResolver);
}
};
-
+
public static void clearThreadLocals()
{
documentThreadLocal.remove();
@@ -170,7 +170,13 @@
{
try
{
- return getDocumentBuilder().parse(xmlStream).getDocumentElement();
+ Document doc;
+ DocumentBuilder builder = getDocumentBuilder();
+ synchronized (builder) //synchronize to prevent concurrent parsing on the same
DocumentBuilder
+ {
+ doc = builder.parse(xmlStream);
+ }
+ return doc.getDocumentElement();
}
catch (SAXException se)
{
@@ -188,7 +194,13 @@
{
try
{
- return getDocumentBuilder().parse(source).getDocumentElement();
+ Document doc;
+ DocumentBuilder builder = getDocumentBuilder();
+ synchronized (builder) //synchronize to prevent concurrent parsing on the same
DocumentBuilder
+ {
+ doc = builder.parse(source);
+ }
+ return doc.getDocumentElement();
}
catch (SAXException se)
{