* @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);
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.*;
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 {