Author: henning
Date: Sat Nov  4 12:11:29 2006
New Revision: 471254

URL: http://svn.apache.org/viewvc?view=rev&rev=471254
Log:
Reorganize the Throwable wrapping a bit (shuffle it up into VelocityException).
Add Template Name, Line Number and Column Number recording to 
MethodInvocationException
by implementing the ExtendedParseException interface thus allowing Velocity 
integrators
to retrieve the location and the template exactly and in the same way as with 
the other
parse exceptions. Resolves VELOCITY-414.

Modified:
    jakarta/velocity/engine/trunk/CONTRIBUTORS
    
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/exception/MethodInvocationException.java
    
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/exception/VelocityException.java
    
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java
    
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
    
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTReference.java

Modified: jakarta/velocity/engine/trunk/CONTRIBUTORS
URL: 
http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/CONTRIBUTORS?view=diff&rev=471254&r1=471253&r2=471254
==============================================================================
--- jakarta/velocity/engine/trunk/CONTRIBUTORS (original)
+++ jakarta/velocity/engine/trunk/CONTRIBUTORS Sat Nov  4 12:11:29 2006
@@ -25,6 +25,7 @@
 Leon Messerschmidt
 Llewellyn Falco
 Matt Raible
+Matthijs Lambooy
 Nathan Bubna   
 Paulo Gaspar
 Peter Romianowski

Modified: 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/exception/MethodInvocationException.java
URL: 
http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/src/java/org/apache/velocity/exception/MethodInvocationException.java?view=diff&rev=471254&r1=471253&r2=471254
==============================================================================
--- 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/exception/MethodInvocationException.java
 (original)
+++ 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/exception/MethodInvocationException.java
 Sat Nov  4 12:11:29 2006
@@ -1,5 +1,7 @@
 package org.apache.velocity.exception;
 
+import org.apache.commons.lang.StringUtils;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -16,10 +18,9 @@
  * "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.    
+ * under the License.
  */
 
-import org.apache.velocity.util.ExceptionUtils;
 
 
 /**
@@ -33,16 +34,20 @@
  * @author <a href="mailto:[EMAIL PROTECTED]">Geir Magnusson Jr.</a>
  * @version $Id$
  */
-public class MethodInvocationException extends VelocityException
+public class MethodInvocationException extends VelocityException implements 
ExtendedParseException
 {
     /**
      * Version Id for serializable
      */
-    private static final long serialVersionUID = 7305685093478106341L;
+    private static final long serialVersionUID = 7305685093478106342L;
 
-    private String methodName = "";
     private String referenceName = "";
-    private Throwable wrapped = null;
+
+    private final String methodName;
+    
+    private final int lineNumber;
+    private final int columnNumber;
+    private final String templateName;
 
     /**
      *  CTOR - wraps the passed in exception for
@@ -51,18 +56,21 @@
      *  @param message
      *  @param e Throwable that we are wrapping
      *  @param methodName name of method that threw the exception
+     *  @param templateName The name of the template where the exception 
occured.
      */
-    public MethodInvocationException( String message, Throwable e, String 
methodName )
+    public MethodInvocationException(final String message, final Throwable e, 
final String methodName, final String templateName, final int lineNumber, final 
int columnNumber)
     {
-        super(message);
-        this.wrapped = e;
-        ExceptionUtils.setCause(this, e);
+        super(message, e);
+
         this.methodName = methodName;
+        this.templateName = templateName;
+        this.lineNumber = lineNumber;
+        this.columnNumber = columnNumber;
     }
 
     /**
      *  Returns the name of the method that threw the
-     *  exception
+     *  exception.
      *
      *  @return String name of method
      */
@@ -72,34 +80,60 @@
     }
 
     /**
-     *  returns the wrapped Throwable that caused this
-     *  MethodInvocationException to be thrown
-     *
-     *  @return Throwable thrown by method invocation
-     */
-    public Throwable getWrappedThrowable()
-    {
-        return wrapped;
-    }
-
-    /**
-     *  Sets the reference name that threw this exception
+     *  Sets the reference name that threw this exception.
      *
      *  @param ref name of reference
      */
-    public void setReferenceName( String ref )
+    public void setReferenceName(String ref)
     {
         referenceName = ref;
     }
 
     /**
      *  Retrieves the name of the reference that caused the
-     *  exception
+     *  exception.
      *
-     *  @return name of reference
+     *  @return name of reference.
      */
     public String getReferenceName()
     {
         return referenceName;
+    }
+
+    /**
+     * @see ExtendedParseException#getColumnNumber()
+     */
+    public int getColumnNumber()
+    {
+       return columnNumber;
+    }
+
+    /**
+     * @see ExtendedParseException#getLineNumber()
+     */
+    public int getLineNumber()
+    {
+       return lineNumber;
+    }
+
+    /**
+     * @see ExtendedParseException#getTemplateName()
+     */
+    public String getTemplateName()
+    {
+       return templateName;
+    }
+
+    /**
+     * @see Exception#getMessage()
+     */
+    public String getMessage()
+    {
+        StringBuffer message = new StringBuffer();
+        message.append(super.getMessage());
+        message.append(" @ ");
+        message.append(StringUtils.isNotEmpty(templateName) ? templateName : 
"<unknown template>");
+        
message.append("[").append(lineNumber).append(",").append(columnNumber).append("]");
+        return message.toString();
     }
 }

Modified: 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/exception/VelocityException.java
URL: 
http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/src/java/org/apache/velocity/exception/VelocityException.java?view=diff&rev=471254&r1=471253&r2=471254
==============================================================================
--- 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/exception/VelocityException.java
 (original)
+++ 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/exception/VelocityException.java
 Sat Nov  4 12:11:29 2006
@@ -1,5 +1,7 @@
 package org.apache.velocity.exception;
 
+import org.apache.velocity.util.ExceptionUtils;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -26,18 +28,43 @@
  * @author <a href="mailto:[EMAIL PROTECTED]">Kyle F. Downey</a>
  * @version $Id$
  */
-public class VelocityException extends RuntimeException
+public class VelocityException
+        extends RuntimeException
 {
     /**
      * Version Id for serializable
      */
-    private static final long serialVersionUID = 1251243065134956044L;
+    private static final long serialVersionUID = 1251243065134956045L;
+
+    private final Throwable wrapped;
 
     /**
-     * @param exceptionMessage
+     * @param exceptionMessage The message to register.
      */
-    public VelocityException(String exceptionMessage )
+    public VelocityException(String exceptionMessage)
     {
         super(exceptionMessage);
+        wrapped = null;
+    }
+
+    /**
+     * @param exceptionMessage The message to register.
+     */
+    public VelocityException(final String exceptionMessage, final Throwable 
wrapped)
+    {
+        super(exceptionMessage);
+        this.wrapped = wrapped;
+        ExceptionUtils.setCause(this, wrapped);
+    }
+
+    /**
+     *  returns the wrapped Throwable that caused this
+     *  MethodInvocationException to be thrown
+     *
+     *  @return Throwable thrown by method invocation
+     */
+    public Throwable getWrappedThrowable()
+    {
+        return wrapped;
     }
 }

Modified: 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java
URL: 
http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java?view=diff&rev=471254&r1=471253&r2=471254
==============================================================================
--- 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java
 (original)
+++ 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTIdentifier.java
 Sat Nov  4 12:11:29 2006
@@ -205,9 +205,8 @@
                       "Invocation of method '" + vg.getMethodName() + "'"
                       + " in  " + o.getClass()
                       + " threw exception "
-                      + ite.getTargetException().getClass() + " : "
-                      + ite.getTargetException().getMessage(),
-                      ite.getTargetException(), vg.getMethodName());
+                      + ite.getTargetException().toString(),
+                      ite.getTargetException(), vg.getMethodName(), 
context.getCurrentTemplateName(), this.getLine(), this.getColumn());
                 }
             }
             else
@@ -220,9 +219,8 @@
                 "Invocation of method '" + vg.getMethodName() + "'"
                 + " in  " + o.getClass()
                 + " threw exception "
-                + ite.getTargetException().getClass() + " : "
-                + ite.getTargetException().getMessage(),
-                ite.getTargetException(), vg.getMethodName());
+                + ite.getTargetException().toString(),
+                ite.getTargetException(), vg.getMethodName(), 
context.getCurrentTemplateName(), this.getLine(), this.getColumn());
 
 
             }

Modified: 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
URL: 
http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java?view=diff&rev=471254&r1=471253&r2=471254
==============================================================================
--- 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
 (original)
+++ 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTMethod.java
 Sat Nov  4 12:11:29 2006
@@ -288,11 +288,9 @@
                     throw new MethodInvocationException(
                         "Invocation of method '"
                         + methodName + "' in  " + o.getClass()
-                        + " in template " + context.getCurrentTemplateName()
-                        + " at line=" + this.getLine() + " column=" + 
this.getColumn()
                         + " threw exception "
-                        + e.getClass() + " : " + e.getMessage(),
-                        e, methodName );
+                        + e.toString(),
+                        e, methodName, context.getCurrentTemplateName(), 
this.getLine(), this.getColumn());
                 }
             }
             else
@@ -304,12 +302,9 @@
                 throw new MethodInvocationException(
                 "Invocation of method '"
                 + methodName + "' in  " + o.getClass()
-                + " in template " + context.getCurrentTemplateName()
-                + " at line=" + this.getLine() + " column=" + this.getColumn()
                 + " threw exception "
-                + ite.getTargetException().getClass() + " : "
-                + ite.getTargetException().getMessage(),
-                ite.getTargetException(), methodName );
+                + ite.getTargetException().toString(),
+                ite.getTargetException(), methodName, 
context.getCurrentTemplateName(), this.getLine(), this.getColumn());
             }
         }
         /**

Modified: 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTReference.java
URL: 
http://svn.apache.org/viewvc/jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTReference.java?view=diff&rev=471254&r1=471253&r2=471254
==============================================================================
--- 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTReference.java
 (original)
+++ 
jakarta/velocity/engine/trunk/src/java/org/apache/velocity/runtime/parser/node/ASTReference.java
 Sat Nov  4 12:11:29 2006
@@ -497,8 +497,8 @@
                 "ASTReference : Invocation of method '"
                 + identifier + "' in  " + result.getClass()
                 + " threw exception "
-                + ite.getTargetException().getClass(),
-               ite.getTargetException(), identifier );
+                + ite.getTargetException().toString(),
+               ite.getTargetException(), identifier, 
context.getCurrentTemplateName(), this.getLine(), this.getColumn());
         }
         /**
          * pass through application level runtime exceptions



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to