View Javadoc

1   package org.apache.velocity.exception;
2   
3   import org.apache.commons.lang.StringUtils;
4   
5   /*
6    * Licensed to the Apache Software Foundation (ASF) under one
7    * or more contributor license agreements.  See the NOTICE file
8    * distributed with this work for additional information
9    * regarding copyright ownership.  The ASF licenses this file
10   * to you under the Apache License, Version 2.0 (the
11   * "License"); you may not use this file except in compliance
12   * with the License.  You may obtain a copy of the License at
13   *
14   *   http://www.apache.org/licenses/LICENSE-2.0
15   *
16   * Unless required by applicable law or agreed to in writing,
17   * software distributed under the License is distributed on an
18   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19   * KIND, either express or implied.  See the License for the
20   * specific language governing permissions and limitations
21   * under the License.
22   */
23  
24  
25  
26  /**
27   *  Application-level exception thrown when a reference method is
28   *  invoked and an exception is thrown.
29   *  <br>
30   *  When this exception is thrown, a best effort will be made to have
31   *  useful information in the exception's message.  For complete
32   *  information, consult the runtime log.
33   *
34   * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
35   * @version $Id: MethodInvocationException.java 471254 2006-11-04 20:11:29Z henning $
36   */
37  public class MethodInvocationException extends VelocityException implements ExtendedParseException
38  {
39      /**
40       * Version Id for serializable
41       */
42      private static final long serialVersionUID = 7305685093478106342L;
43  
44      private String referenceName = "";
45  
46      private final String methodName;
47      
48      private final int lineNumber;
49      private final int columnNumber;
50      private final String templateName;
51  
52      /**
53       *  CTOR - wraps the passed in exception for
54       *  examination later
55       *
56       *  @param message
57       *  @param e Throwable that we are wrapping
58       *  @param methodName name of method that threw the exception
59       *  @param templateName The name of the template where the exception occured.
60       */
61      public MethodInvocationException(final String message, final Throwable e, final String methodName, final String templateName, final int lineNumber, final int columnNumber)
62      {
63          super(message, e);
64  
65          this.methodName = methodName;
66          this.templateName = templateName;
67          this.lineNumber = lineNumber;
68          this.columnNumber = columnNumber;
69      }
70  
71      /**
72       *  Returns the name of the method that threw the
73       *  exception.
74       *
75       *  @return String name of method
76       */
77      public String getMethodName()
78      {
79          return methodName;
80      }
81  
82      /**
83       *  Sets the reference name that threw this exception.
84       *
85       *  @param ref name of reference
86       */
87      public void setReferenceName(String ref)
88      {
89          referenceName = ref;
90      }
91  
92      /**
93       *  Retrieves the name of the reference that caused the
94       *  exception.
95       *
96       *  @return name of reference.
97       */
98      public String getReferenceName()
99      {
100         return referenceName;
101     }
102 
103     /**
104      * @see ExtendedParseException#getColumnNumber()
105      */
106     public int getColumnNumber()
107     {
108 	return columnNumber;
109     }
110 
111     /**
112      * @see ExtendedParseException#getLineNumber()
113      */
114     public int getLineNumber()
115     {
116 	return lineNumber;
117     }
118 
119     /**
120      * @see ExtendedParseException#getTemplateName()
121      */
122     public String getTemplateName()
123     {
124 	return templateName;
125     }
126 
127     /**
128      * @see Exception#getMessage()
129      */
130     public String getMessage()
131     {
132         StringBuffer message = new StringBuffer();
133         message.append(super.getMessage());
134         message.append(" @ ");
135         message.append(StringUtils.isNotEmpty(templateName) ? templateName : "<unknown template>");
136         message.append("[").append(lineNumber).append(",").append(columnNumber).append("]");
137         return message.toString();
138     }
139 }