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