]> source.dussan.org Git - poi.git/commitdiff
[bug-63240] make DocumentHelper.newDocumentBuilder non-synchronized]
authorPJ Fanning <fanningpj@apache.org>
Wed, 6 Mar 2019 18:36:12 +0000 (18:36 +0000)
committerPJ Fanning <fanningpj@apache.org>
Wed, 6 Mar 2019 18:36:12 +0000 (18:36 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1854935 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/ooxml/util/DocumentHelper.java
src/ooxml/testcases/org/apache/poi/ooxml/util/TestDocumentHelper.java

index cf9fbf71ad634eabaa7474187d6b761a51b346ba..734f169dc1c6b617d2e5980ac01bc30c992e5e7b 100644 (file)
@@ -86,7 +86,7 @@ public final class DocumentHelper {
      * @throws IllegalStateException If creating the DocumentBuilder fails, e.g.
      *  due to {@link ParserConfigurationException}.
      */
-    public static synchronized DocumentBuilder newDocumentBuilder() {
+    public static DocumentBuilder newDocumentBuilder() {
         try {
             DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
             documentBuilder.setEntityResolver(SAXHelper.IGNORING_ENTITY_RESOLVER);
index 63c6610f7e1f20d20f04a13fbb56d07fff3c4b64..9ffb78627a9c94e400a2833fd1d37b067348fc8b 100644 (file)
@@ -22,6 +22,9 @@ import org.xml.sax.InputSource;
 import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilder;
 import java.io.ByteArrayInputStream;
+import java.util.ArrayList;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
 
 import static org.junit.Assert.*;
 
@@ -35,6 +38,21 @@ public class TestDocumentHelper {
         documentBuilder.parse(new InputSource(new ByteArrayInputStream("<xml></xml>".getBytes("UTF-8"))));
     }
 
+    @Test
+    public void testCreatingManyDocumentBuilders() throws Exception {
+        int limit = 1000;
+        ArrayList<CompletableFuture<DocumentBuilder>> futures = new ArrayList<>();
+        for(int i = 0; i < limit; i++) {
+            futures.add(CompletableFuture.supplyAsync(() -> {
+                return DocumentHelper.newDocumentBuilder();
+            }));
+        }
+        for(CompletableFuture<DocumentBuilder> future : futures) {
+            DocumentBuilder documentBuilder = future.get(10, TimeUnit.SECONDS);
+            assertTrue(documentBuilder.isNamespaceAware());
+        }
+    }
+
     @Test
     public void testDocumentBuilderFactory() throws Exception {
         try {