You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by lu...@apache.org on 2003/02/26 01:11:39 UTC
cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime ProtectedFunctionMapper.java
luehe 2003/02/25 16:11:39
Modified: jasper2/src/share/org/apache/jasper/compiler Compiler.java
Generator.java JspUtil.java PageInfo.java
Validator.java
jasper2/src/share/org/apache/jasper/runtime
ProtectedFunctionMapper.java
Added: jasper2/src/share/org/apache/jasper/compiler
FunctionMapperImpl.java
Log:
Consolidated all code that is concerned with populating EL function
map into new FunctionMapperImpl class, an instance of which is stored
with a compilation unit's PageInfo. This class is also leveraged by
the Validator and Generator classes.
Revision Changes Path
1.55 +4 -0 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java
Index: Compiler.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java,v
retrieving revision 1.54
retrieving revision 1.55
diff -u -r1.54 -r1.55
--- Compiler.java 24 Feb 2003 19:39:39 -0000 1.54
+++ Compiler.java 26 Feb 2003 00:11:37 -0000 1.55
@@ -249,6 +249,10 @@
return;
}
+ // Generate FunctionMapper (used for validation of EL expressions and
+ // code generation)
+ pageInfo.setFunctionMapper(new FunctionMapperImpl(this));
+
// Validate and process attributes
Validator.validate(this, pageNodes);
1.166 +32 -56 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
Index: Generator.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
retrieving revision 1.165
retrieving revision 1.166
diff -u -r1.165 -r1.166
--- Generator.java 24 Feb 2003 18:09:36 -0000 1.165
+++ Generator.java 26 Feb 2003 00:11:38 -0000 1.166
@@ -613,66 +613,42 @@
private void generateELFunctionMap()
throws JasperException
{
- Hashtable taglibs = pageInfo.getTagLibraries();
- Iterator iter = taglibs.keySet().iterator();
- boolean fnPresent = false;
-
- // Check to see if at least one function is present.
- while( iter.hasNext() ) {
- String key = (String)iter.next();
- TagLibraryInfo tli = (TagLibraryInfo)taglibs.get( key );
- if( tli.getFunctions() != null && tli.getFunctions().length > 0 ) {
- fnPresent = true;
- break;
- }
- }
-
+ FunctionMapperImpl fnMap = pageInfo.getFunctionMapper();
+
out.printil("private static org.apache.jasper.runtime.ProtectedFunctionMapper _jspx_fnmap;");
- if( fnPresent ) {
- iter = taglibs.keySet().iterator();
+ if (!fnMap.isEmpty()) {
+ Iterator iter = fnMap.keySet().iterator();
out.println();
out.printil("static {");
out.pushIndent();
out.printil("_jspx_fnmap = org.apache.jasper.runtime.ProtectedFunctionMapper.getInstance();");
- while( iter.hasNext() ) {
- String key = (String)iter.next();
- TagLibraryInfo tli = (TagLibraryInfo)taglibs.get( key );
- FunctionInfo[] fnInfo = tli.getFunctions();
- String fnPrefix = tli.getPrefixString();
- out.printil( "// Functions for " + tli.getShortName() );
- for( int i = 0; i < fnInfo.length; i++ ) {
- out.printin("_jspx_fnmap.mapFunction(");
- out.print(quote(fnPrefix));
- out.print(", ");
- out.print(quote(fnInfo[i].getName()));
- out.print(", ");
- out.print(fnInfo[i].getFunctionClass() + ".class, ");
- String fnSignature = fnInfo[i].getFunctionSignature();
- JspUtil.FunctionSignature functionSignature =
- new JspUtil.FunctionSignature( fnSignature,
- tli.getShortName(), err, ctxt.getClassLoader() );
- out.print( quote( functionSignature.getMethodName() ) );
- out.print(", ");
- Class[] args = functionSignature.getParameterTypes();
- if (args != null) {
- out.print("new Class[] {" );
- for( int j = 0; j < args.length; j++ ) {
- out.print( args[j].getName() + ".class" );
- if( j < (args.length - 1) ) {
- out.print( ", " );
- }
+ while (iter.hasNext()) {
+ String key = (String) iter.next();
+ out.printin("_jspx_fnmap.mapFunction(");
+ out.print(quote(key));
+ out.print(", ");
+ out.print(fnMap.getFunctionClass(key) + ".class, ");
+ out.print(quote(fnMap.getMethodName(key)));
+ out.print(", ");
+ Class[] args = fnMap.getParameterTypes(key);
+ if (args != null) {
+ out.print("new Class[] {" );
+ for( int j = 0; j < args.length; j++ ) {
+ out.print( args[j].getName() + ".class" );
+ if( j < (args.length - 1) ) {
+ out.print( ", " );
}
- out.print("} ");
- } else {
- out.print("null");
}
- out.println(");");
- }
- }
- out.popIndent();
- out.printil("}");
- out.println();
- }
+ out.print("} ");
+ } else {
+ out.print("null");
+ }
+ out.println(");");
+ }
+ }
+ out.popIndent();
+ out.printil("}");
+ out.println();
}
/**
1.33 +3 -117 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspUtil.java
Index: JspUtil.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspUtil.java,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- JspUtil.java 20 Feb 2003 15:50:36 -0000 1.32
+++ JspUtil.java 26 Feb 2003 00:11:38 -0000 1.33
@@ -63,12 +63,9 @@
import java.net.URL;
import java.io.*;
-import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
-import java.util.NoSuchElementException;
import java.util.Vector;
-import java.util.StringTokenizer;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;
@@ -629,117 +626,6 @@
*/
public static String nextTemporaryVariableName() {
return Constants.TEMP_VARIABLE_NAME_PREFIX + (tempSequenceNumber++);
- }
-
- /**
- * Parses and encapsulates a function signature, as would appear in
- * a TLD.
- */
- public static class FunctionSignature {
- private String returnType;
- private String methodName;
- private Class[] parameterTypes;
-
- /**
- * Parses a function signature, as would appear in the TLD
- *
- * @param signature The signature to parse
- * @param tagName Name of tag, for error messages.
- * @throws JasperException If an error occurred while parsing the
- * signature.
- */
- public FunctionSignature( String signature, String tagName,
- ErrorDispatcher err, ClassLoader loader )
- throws JasperException
- {
- try {
- // Parse function signature, assuming syntax:
- // <return-type> S <method-name> S? '('
- // ( <arg-type> ( ',' <arg-type> )* )? ')'
- String ws = " \t\n\r";
- StringTokenizer sigTokenizer = new StringTokenizer(
- signature, ws + "(),", true);
-
- // Return type:
- this.returnType = sigTokenizer.nextToken();
-
- // Skip whitespace and read <method-name>:
- do {
- this.methodName = sigTokenizer.nextToken();
- } while( ws.indexOf( this.methodName ) != -1 );
-
- // Skip whitespace and read '(':
- String paren;
- do {
- paren = sigTokenizer.nextToken();
- } while( ws.indexOf( paren ) != -1 );
-
- if( !paren.equals( "(" ) ) {
- err.jspError("jsp.error.tld.fn.invalid.signature.parenexpected",
- tagName, this.methodName);
- }
-
- // ( <arg-type> S? ( ',' S? <arg-type> S? )* )? ')'
-
- // Skip whitespace and read <arg-type>:
- String argType;
- do {
- argType = sigTokenizer.nextToken();
- } while( ws.indexOf( argType ) != -1 );
-
- if( !argType.equals( ")" ) ) {
- ArrayList parameterTypes = new ArrayList();
- do {
- if( ",(".indexOf( argType ) != -1 ) {
- err.jspError("jsp.error.tld.fn.invalid.signature",
- tagName, this.methodName);
- }
-
- parameterTypes.add(toClass(argType, loader));
-
- String comma;
- do {
- comma = sigTokenizer.nextToken();
- } while( ws.indexOf( comma ) != -1 );
-
- if( comma.equals( ")" ) ) {
- break;
- }
- if( !comma.equals( "," ) ) {
- err.jspError("jsp.error.tld.fn.invalid.signature.commaexpected",
- tagName, this.methodName);
- }
-
- // <arg-type>
- do {
- argType = sigTokenizer.nextToken();
- } while( ws.indexOf( argType ) != -1 );
- } while( true );
- this.parameterTypes = (Class[])parameterTypes.toArray(
- new Class[parameterTypes.size()] );
- }
- }
- catch( NoSuchElementException e ) {
- err.jspError("jsp.error.tld.fn.invalid.signature",
- tagName, this.methodName);
- }
- catch( ClassNotFoundException e ) {
- err.jspError("jsp.error.tld.fn.invalid.signature.classnotfound",
- e.getMessage(), tagName, this.methodName);
- }
- }
-
- public String getReturnType() {
- return this.returnType;
- }
-
- public String getMethodName() {
- return this.methodName;
- }
-
- public Class[] getParameterTypes() {
- return this.parameterTypes;
- }
}
public static String coerceToPrimitiveBoolean(String s,
1.22 +12 -3 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/PageInfo.java
Index: PageInfo.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/PageInfo.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- PageInfo.java 19 Feb 2003 19:00:59 -0000 1.21
+++ PageInfo.java 26 Feb 2003 00:11:38 -0000 1.22
@@ -77,6 +77,7 @@
private BeanRepository beanRepository;
private Hashtable tagLibraries;
+ private FunctionMapperImpl funcMap;
private String language = "java";
private String xtends = Constants.JSP_SERVLET_BASE;
@@ -373,5 +374,13 @@
public void setOmitXmlDecl(String omit) {
omitXmlDecl = omit;
+ }
+
+ public void setFunctionMapper(FunctionMapperImpl map) {
+ this.funcMap = map;
+ }
+
+ public FunctionMapperImpl getFunctionMapper() {
+ return this.funcMap;
}
}
1.80 +4 -95 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Validator.java
Index: Validator.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Validator.java,v
retrieving revision 1.79
retrieving revision 1.80
diff -u -r1.79 -r1.80
--- Validator.java 24 Feb 2003 18:09:37 -0000 1.79
+++ Validator.java 26 Feb 2003 00:11:38 -0000 1.80
@@ -448,8 +448,7 @@
this.err = compiler.getErrorDispatcher();
this.tagInfo = compiler.getCompilationContext().getTagInfo();
this.loader = compiler.getCompilationContext().getClassLoader();
- this.functionMapper = new ValidatorFunctionMapper( this.pageInfo,
- this.err, this.loader );
+ this.functionMapper = pageInfo.getFunctionMapper();
}
public void visit(Node.JspRoot n) throws JasperException {
@@ -1268,96 +1267,6 @@
if (errMsg != null) {
errDisp.jspError(errMsg.toString());
}
- }
-
- /**
- * A Function Mapper to be used by the validator to help in parsing
- * EL Expressions.
- */
- private static class ValidatorFunctionMapper
- implements FunctionMapper
- {
- private PageInfo pageInfo;
- private ErrorDispatcher err;
- private ClassLoader loader;
-
- /**
- * HashMap of cached functions that we already looked up.
- * Key = prefix, value = HashMap, where key = localName,
- * value = Method.
- */
- private HashMap cachedFunctions = new HashMap();
-
- public ValidatorFunctionMapper( PageInfo pageInfo,
- ErrorDispatcher err, ClassLoader loader )
- {
- this.pageInfo = pageInfo;
- this.err = err;
- this.loader = loader;
- }
-
- public Method resolveFunction( String prefix, String localName ) {
- boolean cached = false;
- Method result = null;
-
- // Look up entry in cache:
- HashMap cachedMethods = (HashMap)this.cachedFunctions.get( prefix );
- if( cachedMethods != null ) {
- if( cachedMethods.containsKey( localName ) ) {
- result = (Method)cachedMethods.get( localName );
- cached = true;
- }
- }
-
- // If not cached, look it up:
- if( !cached ) {
- Hashtable taglibraries = pageInfo.getTagLibraries();
- TagLibraryInfo info =
- (TagLibraryInfo)taglibraries.get( prefix );
- if( info != null ) {
- FunctionInfo fnInfo =
- (FunctionInfo)info.getFunction( localName );
- if( fnInfo != null ) {
- String clazz = fnInfo.getFunctionClass();
- try {
- JspUtil.FunctionSignature functionSignature =
- new JspUtil.FunctionSignature(
- fnInfo.getFunctionSignature(),
- info.getShortName(), this.err, this.loader );
- Class c = Class.forName( clazz );
- result = c.getDeclaredMethod(
- functionSignature.getMethodName(),
- functionSignature.getParameterTypes() );
- }
- catch( JasperException e ) {
- // return null.
- // XXX - If the EL API evolves to allow for
- // an exception to be thrown, we should provide
- // details here.
- }
- catch( ClassNotFoundException e ) {
- // return null.
- // XXX - See above comment regarding detailed
- // error reporting.
- }
- catch( NoSuchMethodException e ) {
- // return null.
- // XXX - See above comment regarding detailed
- // error reporting.
- }
- }
- }
-
- // Store result in cache:
- if( cachedMethods == null ) {
- cachedMethods = new HashMap();
- this.cachedFunctions.put( prefix, cachedMethods );
- }
- cachedMethods.put( localName, result );
- }
-
- return result;
- }
}
}
1.1 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/FunctionMapperImpl.java
Index: FunctionMapperImpl.java
===================================================================
/*
* $Header: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/FunctionMapperImpl.java,v 1.1 2003/02/26 00:11:38 luehe Exp $
* $Revision: 1.1 $
* $Date: 2003/02/26 00:11:38 $
*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.jasper.compiler;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.StringTokenizer;
import java.util.NoSuchElementException;
import java.util.Set;
import javax.servlet.jsp.tagext.TagLibraryInfo;
import javax.servlet.jsp.tagext.FunctionInfo;
import javax.servlet.jsp.el.FunctionMapper;
import org.apache.jasper.JasperException;
class FunctionMapperImpl implements FunctionMapper {
// Maps "prefix:name" to java.lang.Method objects
private HashMap fnMap;
// Maps "prefix:name" to FunctionSignature
private HashMap fnSigMap;
// Maps "prefix:name" to FunctionInfo
private HashMap fnInfoMap;
/*
* Constructor
*/
FunctionMapperImpl(Compiler compiler) throws JasperException {
this.fnMap = new java.util.HashMap();
this.fnSigMap = new java.util.HashMap();
this.fnInfoMap = new java.util.HashMap();
ErrorDispatcher err = compiler.getErrorDispatcher();
Hashtable taglibs = compiler.getPageInfo().getTagLibraries();
Iterator iter = taglibs.keySet().iterator();
ClassLoader loader = compiler.getCompilationContext().getClassLoader();
while (iter.hasNext()) {
String prefix = (String) iter.next();
TagLibraryInfo tli = (TagLibraryInfo) taglibs.get(prefix);
FunctionInfo[] fnInfos = tli.getFunctions();
for (int i = 0; fnInfos != null && i < fnInfos.length; i++) {
FunctionSignature fnSig =
new FunctionSignature(fnInfos[i].getFunctionSignature(),
tli.getShortName(), err, loader);
Method method = null;
try {
Class c = loader.loadClass(fnInfos[i].getFunctionClass());
method = c.getDeclaredMethod(fnSig.getMethodName(),
fnSig.getParameterTypes());
} catch (Exception e) {
err.jspError(e);
}
String key = prefix + ":" + fnInfos[i].getName();
this.fnMap.put(key, method);
this.fnSigMap.put(key, fnSig);
this.fnInfoMap.put(key, fnInfos[i]);
}
}
}
/**
* Resolves the specified local name and prefix into a Java.lang.Method.
* Returns null if the prefix and local name are not found.
*
* @param prefix the prefix of the function
* @param localName the short name of the function
* @return the result of the method mapping. Null means no entry found.
*/
public Method resolveFunction(String prefix, String localName) {
return (Method) fnMap.get(prefix + ":" + localName);
}
/*
*/
String getMethodName(String fnQName) {
String result = null;
FunctionSignature fnSig = (FunctionSignature) fnSigMap.get(fnQName);
if (fnSig != null) {
result = fnSig.getMethodName();
}
return result;
}
/*
*/
Class[] getParameterTypes(String fnQName) {
Class[] result = null;
FunctionSignature fnSig = (FunctionSignature) fnSigMap.get(fnQName);
if (fnSig != null) {
result = fnSig.getParameterTypes();
}
return result;
}
/*
*/
String getFunctionClass(String fnQName) {
String result = null;
FunctionInfo fnInfo = (FunctionInfo) this.fnInfoMap.get(fnQName);
if (fnInfo != null) {
result = fnInfo.getFunctionClass();
}
return result;
}
Set keySet() {
return fnMap.keySet();
}
boolean isEmpty() {
return fnMap.isEmpty();
}
/**
* Parses and encapsulates a function signature, as would appear in
* a TLD.
*/
private static class FunctionSignature {
private String returnType;
private String methodName;
private Class[] parameterTypes;
/**
* Parses a function signature, as would appear in the TLD
*
* @param signature The signature to parse
* @param tagName Name of tag, for error messages.
* @throws JasperException If an error occurred while parsing the
* signature.
*/
public FunctionSignature(String signature, String tagName,
ErrorDispatcher err, ClassLoader loader)
throws JasperException
{
try {
// Parse function signature, assuming syntax:
// <return-type> S <method-name> S? '('
// ( <arg-type> ( ',' <arg-type> )* )? ')'
String ws = " \t\n\r";
StringTokenizer sigTokenizer = new StringTokenizer(
signature, ws + "(),", true);
// Return type:
this.returnType = sigTokenizer.nextToken();
// Skip whitespace and read <method-name>:
do {
this.methodName = sigTokenizer.nextToken();
} while( ws.indexOf( this.methodName ) != -1 );
// Skip whitespace and read '(':
String paren;
do {
paren = sigTokenizer.nextToken();
} while( ws.indexOf( paren ) != -1 );
if( !paren.equals( "(" ) ) {
err.jspError("jsp.error.tld.fn.invalid.signature.parenexpected",
tagName, this.methodName);
}
// ( <arg-type> S? ( ',' S? <arg-type> S? )* )? ')'
// Skip whitespace and read <arg-type>:
String argType;
do {
argType = sigTokenizer.nextToken();
} while( ws.indexOf( argType ) != -1 );
if( !argType.equals( ")" ) ) {
ArrayList parameterTypes = new ArrayList();
do {
if( ",(".indexOf( argType ) != -1 ) {
err.jspError("jsp.error.tld.fn.invalid.signature",
tagName, this.methodName);
}
parameterTypes.add(JspUtil.toClass(argType, loader));
String comma;
do {
comma = sigTokenizer.nextToken();
} while( ws.indexOf( comma ) != -1 );
if( comma.equals( ")" ) ) {
break;
}
if( !comma.equals( "," ) ) {
err.jspError("jsp.error.tld.fn.invalid.signature.commaexpected",
tagName, this.methodName);
}
// <arg-type>
do {
argType = sigTokenizer.nextToken();
} while( ws.indexOf( argType ) != -1 );
} while( true );
this.parameterTypes = (Class[])parameterTypes.toArray(
new Class[parameterTypes.size()] );
}
}
catch( NoSuchElementException e ) {
err.jspError("jsp.error.tld.fn.invalid.signature",
tagName, this.methodName);
}
catch( ClassNotFoundException e ) {
err.jspError("jsp.error.tld.fn.invalid.signature.classnotfound",
e.getMessage(), tagName, this.methodName);
}
}
public String getReturnType() {
return this.returnType;
}
public String getMethodName() {
return this.methodName;
}
public Class[] getParameterTypes() {
return this.parameterTypes;
}
}
}
1.5 +11 -10 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/ProtectedFunctionMapper.java
Index: ProtectedFunctionMapper.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/ProtectedFunctionMapper.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ProtectedFunctionMapper.java 4 Feb 2003 23:38:46 -0000 1.4
+++ ProtectedFunctionMapper.java 26 Feb 2003 00:11:39 -0000 1.5
@@ -115,16 +115,15 @@
* Stores a mapping from the given EL function prefix and name to
* the given Java method.
*
- * @param prefix The EL function prefix
- * @param fnName The EL function name
+ * @param fnQName The EL function qualified name (including prefix)
* @param c The class containing the Java method
* @param methodName The name of the Java method
* @param args The arguments of the Java method
* @throws RuntimeException if no method with the given signature
* could be found.
*/
- public void mapFunction( String prefix, String fnName,
- final Class c, final String methodName, final Class[] args )
+ public void mapFunction(String fnQName, final Class c,
+ final String methodName, final Class[] args )
{
java.lang.reflect.Method method;
if (System.getSecurityManager() != null){
@@ -137,18 +136,20 @@
});
} catch (PrivilegedActionException ex){
throw new RuntimeException(
- "Invalid function mapping - no such method: " + ex.getException().getMessage());
+ "Invalid function mapping - no such method: "
+ + ex.getException().getMessage());
}
} else {
try {
method = c.getDeclaredMethod(methodName, args);
} catch( NoSuchMethodException e ) {
throw new RuntimeException(
- "Invalid function mapping - no such method: " + e.getMessage());
+ "Invalid function mapping - no such method: "
+ + e.getMessage());
}
}
- this.fnmap.put( prefix + ":" + fnName, method );
+ this.fnmap.put(fnQName, method );
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org