[DIGESTER-152] The org.apache.commons.digester3.binder.DigesterLoader doesn't allow binding a default org.xml.sax.Locator

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/digester/trunk@1197908 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index ac8a6c6..7be1cab 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -60,6 +60,7 @@
 IMPROVEMENTS OVER PREVIOUS RELEASE
 ===================================
 
+ * [DIGESTER-152] The DigesterLoader doesn't allow binding a default Locator
  * [DIGESTER-151] The DigesterLoader doesn't allow binding a default ErrorHandler.
 
 DEPRECATIONS
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 21ec341..506f3db 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -26,6 +26,9 @@
     <action dev="simonetripodi" type="add" issue="DIGESTER-153">
       Add Constructor support to ObjectCreateRule
     </action>
+    <action dev="simonetripodi" type="add" issue="DIGESTER-152">
+      The org.apache.commons.digester3.binder.DigesterLoader doesn't allow binding a default org.xml.sax.Locator
+    </action>
     <action dev="simonetripodi" type="add" issue="DIGESTER-151">
       The org.apache.commons.digester3.binder.DigesterLoader doesn't allow binding a default org.xml.sax.ErrorHandler.
     </action>
diff --git a/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java b/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
index f1c29e3..5e91f25 100644
--- a/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
+++ b/src/main/java/org/apache/commons/digester3/binder/DigesterLoader.java
@@ -43,6 +43,7 @@
 import org.apache.commons.digester3.Substitutor;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.ErrorHandler;
+import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
 
@@ -145,6 +146,12 @@
     private ErrorHandler errorHandler = null;
 
     /**
+     * The Locator associated with our parser.
+     * @since 3.2
+     */
+    private Locator locator = null;
+
+    /**
      * Creates a new {@link DigesterLoader} instance given a collection of {@link RulesModule} instance.
      *
      * @param rulesModules The modules containing the {@code Rule} binding
@@ -409,6 +416,29 @@
     }
 
     /**
+     * Gets the document locator associated with our parser.
+     *
+     * @return the Locator supplied by the document parser
+     * @since 3.2
+     */
+    public Locator getDocumentLocator()
+    {
+        return locator;
+    }
+
+    /**
+     * Sets the document locator associated with our parser.
+     *
+     * @param locator the document locator associated with our parser.
+     * @since 3.2
+     */
+    public DigesterLoader setDocumentLocator( Locator locator )
+    {
+        this.locator = locator;
+        return this;
+    }
+
+    /**
      * Creates a new {@link Digester} instance that relies on the default {@link Rules} implementation.
      *
      * @return a new {@link Digester} instance
@@ -517,6 +547,7 @@
         digester.setNamespaceAware( isNamespaceAware() );
         digester.setExecutorService( executorService );
         digester.setErrorHandler( errorHandler );
+        digester.setDocumentLocator( locator );
 
         addRules( digester );
 
diff --git a/src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java b/src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java
index 9a77484..86dea27 100644
--- a/src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java
+++ b/src/test/java/org/apache/commons/digester3/binder/DigesterLoaderTestCase.java
@@ -25,6 +25,7 @@
 import org.apache.commons.digester3.Digester;
 import org.junit.Test;
 import org.xml.sax.ErrorHandler;
+import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
 
@@ -76,4 +77,51 @@
         assertSame( expected, actual );
     }
 
+    @Test
+    public void digeser152()
+    {
+        Locator expected = new Locator()
+        {
+
+            public String getSystemId()
+            {
+                // just fake method
+                return null;
+            }
+
+            public String getPublicId()
+            {
+                // just fake method
+                return null;
+            }
+
+            public int getLineNumber()
+            {
+                // just fake method
+                return 0;
+            }
+
+            public int getColumnNumber()
+            {
+                // just fake method
+                return 0;
+            }
+        };
+
+        Digester digester = newLoader( new AbstractRulesModule()
+        {
+
+            @Override
+            protected void configure()
+            {
+                // do nothing
+            }
+
+        } ).setDocumentLocator( expected ).newDigester();
+
+        Locator actual = digester.getDocumentLocator();
+
+        assertSame( expected, actual );
+    }
+
 }