This is an automated email from the ASF dual-hosted git repository.

garydgregory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/commons-secure-xml.git

commit 6709edd447cc8744061a03a3f29772560b248198
Author: Gary Gregory <[email protected]>
AuthorDate: Mon Aug 31 07:05:45 2026 -0400

    Tests ExceptionInInitializerError in FallbackIgnoreURIResolver.
---
 pom.xml                                               |  5 +++++
 .../commons/xml/secure/FallbackIgnoreURIResolver.java |  6 +++++-
 .../xml/secure/FallbackIgnoreURIResolverTest.java     | 19 +++++++++++++++++++
 3 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/pom.xml b/pom.xml
index 135b335..276aa2f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -100,6 +100,11 @@ limitations under the License.
       <artifactId>junit-jupiter</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <scope>test</scope>
+    </dependency>
     <!-- Reads the compiled classes to compute each secure class' transitive 
class closure (the same computation maven-shade minimizeJar performs). -->
     <dependency>
       <groupId>org.vafer</groupId>
diff --git 
a/src/main/java/org/apache/commons/xml/secure/FallbackIgnoreURIResolver.java 
b/src/main/java/org/apache/commons/xml/secure/FallbackIgnoreURIResolver.java
index 3a14701..277d233 100644
--- a/src/main/java/org/apache/commons/xml/secure/FallbackIgnoreURIResolver.java
+++ b/src/main/java/org/apache/commons/xml/secure/FallbackIgnoreURIResolver.java
@@ -72,8 +72,12 @@ final class FallbackIgnoreURIResolver implements URIResolver 
{
      *                                   configuration error} or if the 
implementation is not available or cannot be instantiated.
      */
     private static Document newEmptyDocument() {
+        return newEmptyDocument(DocumentBuilderFactory.newInstance());
+    }
+
+    private static Document newEmptyDocument(final DocumentBuilderFactory 
factory) {
         try {
-            return 
DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
+            return factory.newDocumentBuilder().newDocument();
         } catch (final ParserConfigurationException e) {
             throw new ExceptionInInitializerError(e);
         }
diff --git 
a/src/test/java/org/apache/commons/xml/secure/FallbackIgnoreURIResolverTest.java
 
b/src/test/java/org/apache/commons/xml/secure/FallbackIgnoreURIResolverTest.java
index b479d7f..dbba632 100644
--- 
a/src/test/java/org/apache/commons/xml/secure/FallbackIgnoreURIResolverTest.java
+++ 
b/src/test/java/org/apache/commons/xml/secure/FallbackIgnoreURIResolverTest.java
@@ -19,7 +19,14 @@
 
 import static org.junit.jupiter.api.Assertions.assertSame;
 import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.URIResolver;
 import javax.xml.transform.dom.DOMSource;
@@ -28,6 +35,18 @@
 
 class FallbackIgnoreURIResolverTest {
 
+    @Test
+    void newEmptyDocumentThrowsExceptionInInitializerError() throws Exception {
+        final DocumentBuilderFactory factory = 
mock(DocumentBuilderFactory.class);
+        final ParserConfigurationException failure = new 
ParserConfigurationException("test");
+        when(factory.newDocumentBuilder()).thenThrow(failure);
+        final Method method = 
FallbackIgnoreURIResolver.class.getDeclaredMethod("newEmptyDocument", 
DocumentBuilderFactory.class);
+        method.setAccessible(true);
+        final InvocationTargetException exception = 
assertThrows(InvocationTargetException.class, () -> method.invoke(null, 
factory));
+        final ExceptionInInitializerError error = 
(ExceptionInInitializerError) exception.getCause();
+        assertSame(failure, error.getCause());
+    }
+
     @Test
     void resolvesDelegatedAndFallbackSources() throws Exception {
         final DOMSource empty = new DOMSource();

Reply via email to