[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 );
+ }
+
}