diff --git a/core/src/main/java/org/apache/commons/digester3/DefaultThrowingErrorHandler.java b/core/src/main/java/org/apache/commons/digester3/DefaultThrowingErrorHandler.java
new file mode 100644
index 0000000..b182df5
--- /dev/null
+++ b/core/src/main/java/org/apache/commons/digester3/DefaultThrowingErrorHandler.java
@@ -0,0 +1,60 @@
+package org.apache.commons.digester3;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+
+/**
+ * @since 3.2
+ */
+public class DefaultThrowingErrorHandler
+    implements ErrorHandler
+{
+
+    /**
+     * {@inheritDoc}
+     */
+    public void warning( SAXParseException e )
+        throws SAXException
+    {
+        throw e;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void fatalError( SAXParseException e )
+        throws SAXException
+    {
+        throw e;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void error( SAXParseException e )
+        throws SAXException
+    {
+        throw e;
+    }
+
+}
diff --git a/core/src/test/java/org/apache/commons/digester3/Digester171TestCase.java b/core/src/test/java/org/apache/commons/digester3/Digester171TestCase.java
new file mode 100644
index 0000000..3f03a94
--- /dev/null
+++ b/core/src/test/java/org/apache/commons/digester3/Digester171TestCase.java
@@ -0,0 +1,75 @@
+package org.apache.commons.digester3;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import static org.apache.commons.digester3.binder.DigesterLoader.newLoader;
+
+import java.io.File;
+
+import org.apache.commons.digester3.binder.AbstractRulesModule;
+import org.junit.Test;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.SAXParseException;
+
+public class Digester171TestCase
+{
+
+    @Test
+    public void testNoErrorHandler()
+        throws Exception
+    {
+        newLoader( new AbstractRulesModule()
+        {
+
+            @Override
+            protected void configure()
+            {
+                // do nothing
+            }
+
+        } )
+        .setFeature( "http://xml.org/sax/features/validation", true )
+        .newDigester()
+        .parse( new File( "src/test/resources/org/apache/commons/digester3/document-with-relative-dtd-error.xml" ) );
+    }
+
+    @Test( expected = SAXParseException.class )
+    public void testDefaultThrowingErrorHandler()
+        throws Exception
+    {
+        ErrorHandler customErrorHandler = new DefaultThrowingErrorHandler();
+
+        newLoader( new AbstractRulesModule()
+        {
+
+            @Override
+            protected void configure()
+            {
+                // do nothing
+            }
+
+        } )
+        .setFeature( "http://xml.org/sax/features/validation", true )
+        .setErrorHandler( customErrorHandler )
+        .newDigester()
+        .parse( new File( "src/test/resources/org/apache/commons/digester3/document-with-relative-dtd-error.xml" ) );
+    }
+
+}
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 91ba695..1d22888 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -35,6 +35,9 @@
     <action dev="simonetripodi" type="fix" issue="DIGESTER-172" due-to="Ivan Diana">
       Even with custom ErrorHandler, SAX errors are still written to stderr
     </action>
+    <action dev="simonetripodi" type="fix" issue="DIGESTER-171" due-to="Nick Williams">
+      Add DefaultThrowingErrorHandler to Digester API - patch provided by Ivan Diana
+    </action>
     <action dev="simonetripodi" type="fix" issue="DIGESTER-170" due-to="Dale Wijnand">
       Digester.pop(String) throws EmptyStackException where API doc says it returns null
     </action>
