From a6d3f927acef354d2edc8f4d77f1a11031fca503 Mon Sep 17 00:00:00 2001 From: markt Date: Fri, 3 Dec 2010 21:49:54 +0000 Subject: [PATCH] Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50408 Fix NoSuchMethodException when using scoped variables with EL method invocation. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1042021 13f79535-47bb-0310-9956-ffa450edef68 --- java/javax/el/CompositeELResolver.java | 10 +++++++++ test/javax/el/TestCompositeELResolver.java | 33 ++++++++++++++++++++++++++++++ test/webapp-3.0/bug50408.jsp | 26 +++++++++++++++++++++++ webapps/docs/changelog.xml | 8 ++++++++ 4 files changed, 77 insertions(+) create mode 100644 test/javax/el/TestCompositeELResolver.java create mode 100644 test/webapp-3.0/bug50408.jsp diff --git a/java/javax/el/CompositeELResolver.java b/java/javax/el/CompositeELResolver.java index 34080be08..6d3065513 100644 --- a/java/javax/el/CompositeELResolver.java +++ b/java/javax/el/CompositeELResolver.java @@ -21,6 +21,8 @@ import java.beans.FeatureDescriptor; import java.util.Iterator; import java.util.NoSuchElementException; +import javax.servlet.jsp.el.ScopedAttributeELResolver; + public class CompositeELResolver extends ELResolver { private int size; @@ -118,6 +120,14 @@ public class CompositeELResolver extends ELResolver { for (int i = 0; i < sz; i++) { type = this.resolvers[i].getType(context, base, property); if (context.isPropertyResolved()) { + if (resolvers[i] instanceof ScopedAttributeELResolver) { + // Special case since this will always return Object.class + Object value = + resolvers[i].getValue(context, base, property); + if (value != null) { + return value.getClass(); + } + } return type; } } diff --git a/test/javax/el/TestCompositeELResolver.java b/test/javax/el/TestCompositeELResolver.java new file mode 100644 index 000000000..5618077d3 --- /dev/null +++ b/test/javax/el/TestCompositeELResolver.java @@ -0,0 +1,33 @@ +package javax.el; + +import java.io.File; + +import javax.servlet.http.HttpServletResponse; + +import org.apache.catalina.core.StandardContext; +import org.apache.catalina.startup.Tomcat; +import org.apache.catalina.startup.TomcatBaseTest; +import org.apache.tomcat.util.buf.ByteChunk; + +public class TestCompositeELResolver extends TomcatBaseTest { + + public void testBug50408() throws Exception { + Tomcat tomcat = getTomcatInstance(); + + File appDir = new File("test/webapp-3.0"); + // app dir is relative to server home + StandardContext ctxt = (StandardContext) tomcat.addWebapp(null, + "/test", appDir.getAbsolutePath()); + + // This test needs the JSTL libraries + File lib = new File("webapps/examples/WEB-INF/lib"); + ctxt.setAliases("/WEB-INF/lib=" + lib.getCanonicalPath()); + + tomcat.start(); + + int rc = getUrl("http://localhost:" + getPort() + + "/test/bug50408.jsp", new ByteChunk(), null); + + assertEquals(HttpServletResponse.SC_OK, rc); + } +} diff --git a/test/webapp-3.0/bug50408.jsp b/test/webapp-3.0/bug50408.jsp new file mode 100644 index 000000000..31e9635de --- /dev/null +++ b/test/webapp-3.0/bug50408.jsp @@ -0,0 +1,26 @@ +<%-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "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. +--%> +<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> + + + + +

${name} : ${value}

+
+
+ + \ No newline at end of file diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index d02c4e712..edc263948 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -109,6 +109,14 @@ + + + + 50408: Fix NoSuchMethodException when using + scoped variables with EL method invocation. (markt) + + + -- 2.11.0