Browse Source

[bug-63240] make DocumentHelper.newDocumentBuilder non-synchronized]

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1854935 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_4_1_0
PJ Fanning 5 years ago
parent
commit
0786ae5b57

+ 1
- 1
src/ooxml/java/org/apache/poi/ooxml/util/DocumentHelper.java View 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);

+ 18
- 0
src/ooxml/testcases/org/apache/poi/ooxml/util/TestDocumentHelper.java View 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 {

Loading…
Cancel
Save