Hi,
I'm developing an application to parse EL scripts in a file and evaluate them. I am using Java Unified EL for the same. The value expressions are resolving fine however the functions are not. I'm using Tomcat 6.0.10 which is bundled with JBoss 4.2.3. The way I am evaluating the expression is: final MethodExpression methodExpr = exprFactory.createMethodExpression(jspContext.getELContext(), el, expectedType, paramTypes); Object result = methodExpr.invoke(jspContext.getELContext(), params); However, the function is not being invoked and I get a stack trace like such: 2009-02-12 22:35:13,629 [http-0.0.0.0-8080-5] ERROR STDERR () - javax.el.ELException: Function 'testtld:escapeJava' not found 2009-02-12 22:35:13,630 [http-0.0.0.0-8080-5] ERROR STDERR () - at org.apache.el.lang.ExpressionBuilder.visit(ExpressionBuilder.java:171) 2009-02-12 22:35:13,630 [http-0.0.0.0-8080-5] ERROR STDERR () - at org.apache.el.parser.SimpleNode.accept(SimpleNode.java:129) 2009-02-12 22:35:13,630 [http-0.0.0.0-8080-5] ERROR STDERR () - at org.apache.el.lang.ExpressionBuilder.prepare(ExpressionBuilder.java:133) 2009-02-12 22:35:13,630 [http-0.0.0.0-8080-5] ERROR STDERR () - at org.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:147) 2009-02-12 22:35:13,630 [http-0.0.0.0-8080-5] ERROR STDERR () - at org.apache.el.lang.ExpressionBuilder.createMethodExpression(ExpressionBu ilder.java:197) 2009-02-12 22:35:13,630 [http-0.0.0.0-8080-5] ERROR STDERR () - at org.apache.el.ExpressionFactoryImpl.createMethodExpression(ExpressionFac toryImpl.java:57) 2009-02-12 22:35:13,630 [http-0.0.0.0-8080-5] ERROR STDERR () - at test.util.ELExpressionEvaluator.evaluate(ELExpressionEvaluator.java:120) The jsp page that I am using to obtain the ELContext has the taglib directive to include that particular tld. If I invoke that JSP function from a JSP page(using EL), it works fine. However, when I try to resolve the function programmatically as above, I get the error. When I checked the Tomcat source code, I noticed in org.apache.jasper.el.ELContextImpl : private final static FunctionMapper NullFunctionMapper = new FunctionMapper() { public Method resolveFunction(String prefix, String localName) { return null; } }; And a few lines below that, private FunctionMapper functionMapper = NullFunctionMapper; // immutable Although there is a public void setFunctionMapper(FunctionMapper functionMapper) { this.functionMapper = functionMapper; } I am not sure whether that is invoked or how to have it invoked. This could be the problem for me as the ELContext.getFunctionMapper().resolveFunction(...) would return null and I receive a message which corresponds to the Method object resolving to null. I searched over the internet and did not come up with anything related/conclusive that could point me towards a configuration or programmatic step that I could've missed. I'd appreciate it if you could give me some pointers as to what might be the problem here and how to fix it. Also, I do not understand why the org.apache.jasper.el package is being used instead of the org.apache.el package which is the newer implementation. Thanks, Najeed.