From be619e6f43ec8adc87e615df74c579241afdfe59 Mon Sep 17 00:00:00 2001 From: markt Date: Mon, 25 Jul 2011 16:23:39 +0000 Subject: [PATCH] Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=51544 Correctly resolve bean methods in EL so accessible methods that are overridden by inaccessible methods do not cause an IllegalAccessException. Modify test case to catch this problem on Oracle and OpenJDK JREs. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1150767 13f79535-47bb-0310-9956-ffa450edef68 --- java/javax/el/BeanELResolver.java | 7 ++++--- test/org/apache/el/TestValueExpressionImpl.java | 12 ++++++------ webapps/docs/changelog.xml | 5 +++++ 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/java/javax/el/BeanELResolver.java b/java/javax/el/BeanELResolver.java index 7ba9ce02e..ddaa8e2cc 100644 --- a/java/javax/el/BeanELResolver.java +++ b/java/javax/el/BeanELResolver.java @@ -402,7 +402,8 @@ public class BeanELResolver extends ELResolver { Class clazz = base.getClass(); if (paramTypes != null) { try { - matchingMethod = clazz.getMethod(methodName, paramTypes); + matchingMethod = + getMethod(clazz, clazz.getMethod(methodName, paramTypes)); } catch (NoSuchMethodException e) { throw new MethodNotFoundException(e); } @@ -416,11 +417,11 @@ public class BeanELResolver extends ELResolver { if (methodName.equals(m.getName()) && m.getParameterTypes().length == paramCount) { // Same number of parameters - use the first match - matchingMethod = m; + matchingMethod = getMethod(clazz, m); break; } if (m.isVarArgs()) { - matchingMethod = m; + matchingMethod = getMethod(clazz, m); } } if (matchingMethod == null) { diff --git a/test/org/apache/el/TestValueExpressionImpl.java b/test/org/apache/el/TestValueExpressionImpl.java index 904fe57b5..2572ef130 100644 --- a/test/org/apache/el/TestValueExpressionImpl.java +++ b/test/org/apache/el/TestValueExpressionImpl.java @@ -186,10 +186,10 @@ public class TestValueExpressionImpl { context.getVariableMapper().setVariable("beanA", var); ValueExpression ve = factory.createValueExpression( - context, "${beanA.valList.isEmpty()}", String.class); + context, "${beanA.valList.size()}", Integer.class); - String result = (String) ve.getValue(context); - assertEquals("true", result); + Integer result = (Integer) ve.getValue(context); + assertEquals(Integer.valueOf(0), result); } @@ -208,9 +208,9 @@ public class TestValueExpressionImpl { context.getVariableMapper().setVariable("list", var); ValueExpression ve = factory.createValueExpression( - context, "${list.isEmpty()}", Boolean.class); + context, "${list.size()}", Integer.class); - Boolean result = (Boolean) ve.getValue(context); - assertEquals(Boolean.TRUE, result); + Integer result = (Integer) ve.getValue(context); + assertEquals(Integer.valueOf(0), result); } } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 9caec84ce..fe21e03c2 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -109,6 +109,11 @@ 51532: JSP files with dependencies in JARs were recompiled on every access leading to poor performance. (markt) + + 51544: Correctly resolve bean methods in EL so accessible + methods that are overridden by inaccessible methods do not cause an + IllegalAccessException. (markt) + -- 2.11.0