mirror of https://github.com/apache/poi.git
[bug-63240] make DocumentHelper.newDocumentBuilder non-synchronized]
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1854935 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
178ae9a9ff
commit
0786ae5b57
|
@ -86,7 +86,7 @@ public final class DocumentHelper {
|
||||||
* @throws IllegalStateException If creating the DocumentBuilder fails, e.g.
|
* @throws IllegalStateException If creating the DocumentBuilder fails, e.g.
|
||||||
* due to {@link ParserConfigurationException}.
|
* due to {@link ParserConfigurationException}.
|
||||||
*/
|
*/
|
||||||
public static synchronized DocumentBuilder newDocumentBuilder() {
|
public static DocumentBuilder newDocumentBuilder() {
|
||||||
try {
|
try {
|
||||||
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
|
||||||
documentBuilder.setEntityResolver(SAXHelper.IGNORING_ENTITY_RESOLVER);
|
documentBuilder.setEntityResolver(SAXHelper.IGNORING_ENTITY_RESOLVER);
|
||||||
|
|
|
@ -22,6 +22,9 @@ import org.xml.sax.InputSource;
|
||||||
import javax.xml.XMLConstants;
|
import javax.xml.XMLConstants;
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
@ -35,6 +38,21 @@ public class TestDocumentHelper {
|
||||||
documentBuilder.parse(new InputSource(new ByteArrayInputStream("<xml></xml>".getBytes("UTF-8"))));
|
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
|
@Test
|
||||||
public void testDocumentBuilderFactory() throws Exception {
|
public void testDocumentBuilderFactory() throws Exception {
|
||||||
try {
|
try {
|
||||||
|
|
Loading…
Reference in New Issue