You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2011/02/19 19:21:25 UTC

svn commit: r1072407 - /commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java

Author: simonetripodi
Date: Sat Feb 19 18:21:24 2011
New Revision: 1072407

URL: http://svn.apache.org/viewvc?rev=1072407&view=rev
Log:
when reporting an error message, added the Java file name of (Abstract)RulesModule and the related line number where the binding error occurred

Modified:
    commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java

Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java?rev=1072407&r1=1072406&r2=1072407&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/internal/rulesbinder/RulesBinderImpl.java Sat Feb 19 18:21:24 2011
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.Formatter;
 import java.util.List;
 
+import org.apache.commons.digester3.AbstractRulesModule;
 import org.apache.commons.digester3.DigesterLoadingException;
 import org.apache.commons.digester3.Rule;
 import org.apache.commons.digester3.RulesBinder;
@@ -65,6 +66,26 @@ public final class RulesBinderImpl imple
      * {@inheritDoc}
      */
     public void addError(String messagePattern, Object... arguments) {
+        StackTraceElement[] stackTrace = new Exception().getStackTrace();
+        StackTraceElement element = stackTrace[3];
+        Class<?> moduleClass = null;
+
+        try {
+            moduleClass = Class.forName(element.getClassName(), false, this.classLoader);
+        } catch (ClassNotFoundException e) {
+            try {
+                moduleClass = Class.forName(element.getClassName(), false, this.getClass().getClassLoader());
+            } catch (ClassNotFoundException e1) {
+                // swallow, don't write the file name:line number
+            }
+        }
+
+        if (moduleClass != null) {
+            if (!AbstractRulesModule.class.isAssignableFrom(moduleClass)) {
+                element = stackTrace[2];
+            }
+            messagePattern = String.format("%s (%s:%s)", messagePattern, element.getFileName(), element.getLineNumber());
+        }
         this.addError(new ErrorMessage(messagePattern, arguments));
     }