Author: markt Date: Wed Jul 17 14:14:28 2013 New Revision: 1504148 URL: http://svn.apache.org/r1504148 Log: Add the two new resolver types (stream and static) to Jasper in the correct order and modify JasperELResolver so the correct resolvers are skipped.
Modified: tomcat/trunk/java/org/apache/jasper/compiler/Validator.java tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java tomcat/trunk/java/org/apache/jasper/el/ExpressionEvaluatorImpl.java tomcat/trunk/java/org/apache/jasper/el/ExpressionImpl.java tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java tomcat/trunk/java/org/apache/jasper/runtime/JspApplicationContextImpl.java tomcat/trunk/test/javax/el/TestBeanELResolver.java tomcat/trunk/test/javax/el/TestResourceBundleELResolver.java tomcat/trunk/test/org/apache/el/TestELEvaluation.java tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java tomcat/trunk/test/org/apache/el/TestValueExpressionImpl.java tomcat/trunk/test/org/apache/el/parser/TestELParser.java tomcat/trunk/test/org/apache/jasper/compiler/TestAttributeParser.java tomcat/trunk/test/org/apache/jasper/el/TestJasperELResolver.java Modified: tomcat/trunk/java/org/apache/jasper/compiler/Validator.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Validator.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/compiler/Validator.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/Validator.java Wed Jul 17 14:14:28 2013 @@ -1215,7 +1215,8 @@ class Validator { attrs.getQName(i), attrs.getURI(i), attrs.getLocalName(i), attrs.getValue(i), false, el, false); - ELContextImpl ctx = new ELContextImpl(); + ELContextImpl ctx = new ELContextImpl( + expressionFactory); ctx.setFunctionMapper(getFunctionMapper(el)); try { jspAttrs[i].validateEL(this.pageInfo.getExpressionFactory(), ctx); @@ -1377,7 +1378,8 @@ class Validator { result = new Node.JspAttribute(tai, qName, uri, localName, value, false, el, dynamic); - ELContextImpl ctx = new ELContextImpl(); + ELContextImpl ctx = + new ELContextImpl(expressionFactory); ctx.setFunctionMapper(getFunctionMapper(el)); try { @@ -1564,7 +1566,7 @@ class Validator { validateFunctions(el, n); // test it out - ELContextImpl ctx = new ELContextImpl(); + ELContextImpl ctx = new ELContextImpl(expressionFactory); ctx.setFunctionMapper(this.getFunctionMapper(el)); ExpressionFactory ef = this.pageInfo.getExpressionFactory(); try { Modified: tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java (original) +++ tomcat/trunk/java/org/apache/jasper/el/ELContextImpl.java Wed Jul 17 14:14:28 2013 @@ -25,10 +25,12 @@ import javax.el.BeanELResolver; import javax.el.CompositeELResolver; import javax.el.ELContext; import javax.el.ELResolver; +import javax.el.ExpressionFactory; import javax.el.FunctionMapper; import javax.el.ListELResolver; import javax.el.MapELResolver; import javax.el.ResourceBundleELResolver; +import javax.el.StaticFieldELResolver; import javax.el.ValueExpression; import javax.el.VariableMapper; @@ -95,8 +97,8 @@ public final class ELContextImpl extends private VariableMapper variableMapper; - public ELContextImpl() { - this(getDefaultResolver()); + public ELContextImpl(ExpressionFactory factory) { + this(getDefaultResolver(factory)); } public ELContextImpl(ELResolver resolver) { @@ -129,11 +131,11 @@ public final class ELContextImpl extends this.variableMapper = variableMapper; } - public static ELResolver getDefaultResolver() { + public static ELResolver getDefaultResolver(ExpressionFactory factory) { if (Constants.IS_SECURITY_ENABLED) { CompositeELResolver defaultResolver = new CompositeELResolver(); - // TODO ExpressionFactory.getStreamELResolver() - // TODO javax.el.StaticFieldResolver + defaultResolver.add(factory.getStreamELResolver()); + defaultResolver.add(new StaticFieldELResolver()); defaultResolver.add(new MapELResolver()); defaultResolver.add(new ResourceBundleELResolver()); defaultResolver.add(new ListELResolver()); Modified: tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java (original) +++ tomcat/trunk/java/org/apache/jasper/el/ELResolverImpl.java Wed Jul 17 14:14:28 2013 @@ -22,6 +22,7 @@ import java.util.Iterator; import javax.el.ELContext; import javax.el.ELException; import javax.el.ELResolver; +import javax.el.ExpressionFactory; import javax.el.PropertyNotWritableException; import javax.servlet.jsp.el.VariableResolver; @@ -31,9 +32,10 @@ public final class ELResolverImpl extend private final VariableResolver variableResolver; private final ELResolver elResolver; - public ELResolverImpl(VariableResolver variableResolver) { + public ELResolverImpl(VariableResolver variableResolver, + ExpressionFactory factory) { this.variableResolver = variableResolver; - this.elResolver = ELContextImpl.getDefaultResolver(); + this.elResolver = ELContextImpl.getDefaultResolver(factory); } @Override Modified: tomcat/trunk/java/org/apache/jasper/el/ExpressionEvaluatorImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/ExpressionEvaluatorImpl.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/el/ExpressionEvaluatorImpl.java (original) +++ tomcat/trunk/java/org/apache/jasper/el/ExpressionEvaluatorImpl.java Wed Jul 17 14:14:28 2013 @@ -39,12 +39,12 @@ public final class ExpressionEvaluatorIm FunctionMapper fMapper) throws ELException { try { ELContextImpl ctx = - new ELContextImpl(ELContextImpl.getDefaultResolver()); + new ELContextImpl(ELContextImpl.getDefaultResolver(factory)); if (fMapper != null) { ctx.setFunctionMapper(new FunctionMapperImpl(fMapper)); } ValueExpression ve = this.factory.createValueExpression(ctx, expression, expectedType); - return new ExpressionImpl(ve); + return new ExpressionImpl(ve, factory); } catch (javax.el.ELException e) { throw new ELParseException(e.getMessage()); } Modified: tomcat/trunk/java/org/apache/jasper/el/ExpressionImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/ExpressionImpl.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/el/ExpressionImpl.java (original) +++ tomcat/trunk/java/org/apache/jasper/el/ExpressionImpl.java Wed Jul 17 14:14:28 2013 @@ -17,6 +17,7 @@ package org.apache.jasper.el; import javax.el.ELContext; +import javax.el.ExpressionFactory; import javax.el.ValueExpression; import javax.servlet.jsp.el.ELException; import javax.servlet.jsp.el.Expression; @@ -26,15 +27,18 @@ import javax.servlet.jsp.el.VariableReso public final class ExpressionImpl extends Expression { private final ValueExpression ve; + private final ExpressionFactory factory; - public ExpressionImpl(ValueExpression ve) { + + public ExpressionImpl(ValueExpression ve, ExpressionFactory factory) { this.ve = ve; + this.factory = factory; } @Override public Object evaluate(VariableResolver vResolver) throws ELException { - ELContext ctx = new ELContextImpl(new ELResolverImpl(vResolver)); + ELContext ctx = + new ELContextImpl(new ELResolverImpl(vResolver, factory)); return ve.getValue(ctx); } - } Modified: tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java (original) +++ tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java Wed Jul 17 14:14:28 2013 @@ -29,6 +29,7 @@ import javax.el.ListELResolver; import javax.el.MapELResolver; import javax.el.PropertyNotFoundException; import javax.el.ResourceBundleELResolver; +import javax.el.StaticFieldELResolver; import javax.servlet.jsp.el.ImplicitObjectELResolver; import javax.servlet.jsp.el.ScopedAttributeELResolver; @@ -38,21 +39,24 @@ import javax.servlet.jsp.el.ScopedAttrib */ public class JasperELResolver extends CompositeELResolver { + private static final int STANDARD_RESOLVERS_COUNT = 9; + private int size; private ELResolver[] resolvers; private final int appResolversSize; - public JasperELResolver(List<ELResolver> appResolvers) { + public JasperELResolver(List<ELResolver> appResolvers, + ELResolver streamResolver) { appResolversSize = appResolvers.size(); - resolvers = new ELResolver[appResolversSize + 7]; + resolvers = new ELResolver[appResolversSize + STANDARD_RESOLVERS_COUNT]; size = 0; add(new ImplicitObjectELResolver()); for (ELResolver appResolver : appResolvers) { add(appResolver); } - // TODO ExpressionFactory.getStreamELResolver() - // TODO javax.el.StaticFieldResolver + add(streamResolver); + add(new StaticFieldELResolver()); add(new MapELResolver()); add(new ResourceBundleELResolver()); add(new ListELResolver()); @@ -82,7 +86,6 @@ public class JasperELResolver extends Co throws NullPointerException, PropertyNotFoundException, ELException { context.setPropertyResolved(false); - // TODO Review this once the additional resolvers have been implemented int start; Object result = null; @@ -95,9 +98,9 @@ public class JasperELResolver extends Co return result; } } - // skip collection-based resolvers (map, resource, list, array, and - // bean) - start = index + 5; + // skip stream, static and collection-based resolvers (map, + // resource, list, array) and bean + start = index + 7; } else { // skip implicit resolver only start = 1; @@ -125,8 +128,10 @@ public class JasperELResolver extends Co Object result = null; - // skip implicit and call app resolvers - int index = 1 /* implicit */ + appResolversSize; + // skip implicit and call app resolvers, stream resolver and static + // resolver + int index = 1 /* implicit */ + appResolversSize + + 2 /* stream + static */; for (int i = 1; i < index; i++) { result = resolvers[i].invoke( context, base, targetMethod, paramTypes, params); @@ -135,7 +140,7 @@ public class JasperELResolver extends Co } } - // skip map, resource, list, and array resolvers + // skip collection (map, resource, list, and array) resolvers index += 4; // call bean and the rest of resolvers for (int i = index; i < size; i++) { Modified: tomcat/trunk/java/org/apache/jasper/runtime/JspApplicationContextImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/runtime/JspApplicationContextImpl.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/runtime/JspApplicationContextImpl.java (original) +++ tomcat/trunk/java/org/apache/jasper/runtime/JspApplicationContextImpl.java Wed Jul 17 14:14:28 2013 @@ -112,7 +112,8 @@ public class JspApplicationContextImpl i private ELResolver createELResolver() { this.instantiated = true; if (this.resolver == null) { - CompositeELResolver r = new JasperELResolver(this.resolvers); + CompositeELResolver r = new JasperELResolver(this.resolvers, + expressionFactory.getStreamELResolver()); this.resolver = r; } return this.resolver; Modified: tomcat/trunk/test/javax/el/TestBeanELResolver.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/javax/el/TestBeanELResolver.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/test/javax/el/TestBeanELResolver.java (original) +++ tomcat/trunk/test/javax/el/TestBeanELResolver.java Wed Jul 17 14:14:28 2013 @@ -27,7 +27,7 @@ public class TestBeanELResolver { @Test public void testBug53421() { ExpressionFactory factory = ExpressionFactory.newInstance(); - ELContext context = new ELContextImpl(); + ELContext context = new ELContextImpl(factory); Bean bean = new Bean(); Modified: tomcat/trunk/test/javax/el/TestResourceBundleELResolver.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/javax/el/TestResourceBundleELResolver.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/test/javax/el/TestResourceBundleELResolver.java (original) +++ tomcat/trunk/test/javax/el/TestResourceBundleELResolver.java Wed Jul 17 14:14:28 2013 @@ -32,7 +32,7 @@ public class TestResourceBundleELResolve @Test public void bug53001() { ExpressionFactory factory = ExpressionFactory.newInstance(); - ELContext context = new ELContextImpl(); + ELContext context = new ELContextImpl(factory); ResourceBundle rb = new TesterResourceBundle(); Modified: tomcat/trunk/test/org/apache/el/TestELEvaluation.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/TestELEvaluation.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/el/TestELEvaluation.java (original) +++ tomcat/trunk/test/org/apache/el/TestELEvaluation.java Wed Jul 17 14:14:28 2013 @@ -199,9 +199,9 @@ public class TestELEvaluation { // ************************************************************************ private String evaluateExpression(String expression) { - ELContextImpl ctx = new ELContextImpl(); - ctx.setFunctionMapper(new FMapper()); ExpressionFactoryImpl exprFactory = new ExpressionFactoryImpl(); + ELContextImpl ctx = new ELContextImpl(exprFactory); + ctx.setFunctionMapper(new FMapper()); ValueExpression ve = exprFactory.createValueExpression(ctx, expression, String.class); return (String) ve.getValue(ctx); Modified: tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java (original) +++ tomcat/trunk/test/org/apache/el/TestMethodExpressionImpl.java Wed Jul 17 14:14:28 2013 @@ -43,7 +43,7 @@ public class TestMethodExpressionImpl { @Before public void setUp() { factory = ExpressionFactory.newInstance(); - context = new ELContextImpl(); + context = new ELContextImpl(factory); TesterBeanA beanA = new TesterBeanA(); beanA.setName("A"); Modified: tomcat/trunk/test/org/apache/el/TestValueExpressionImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/TestValueExpressionImpl.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/el/TestValueExpressionImpl.java (original) +++ tomcat/trunk/test/org/apache/el/TestValueExpressionImpl.java Wed Jul 17 14:14:28 2013 @@ -40,7 +40,7 @@ public class TestValueExpressionImpl { @Test public void testGetValueReference() { ExpressionFactory factory = ExpressionFactory.newInstance(); - ELContext context = new ELContextImpl(); + ELContext context = new ELContextImpl(factory); TesterBeanB beanB = new TesterBeanB(); beanB.setName("Tomcat"); @@ -66,7 +66,7 @@ public class TestValueExpressionImpl { @Test public void testGetValueReferenceVariable() { ExpressionFactory factory = ExpressionFactory.newInstance(); - ELContext context = new ELContextImpl(); + ELContext context = new ELContextImpl(factory); TesterBeanB beanB = new TesterBeanB(); beanB.setName("Tomcat"); @@ -94,7 +94,7 @@ public class TestValueExpressionImpl { @Test public void testBug49345() { ExpressionFactory factory = ExpressionFactory.newInstance(); - ELContext context = new ELContextImpl(); + ELContext context = new ELContextImpl(factory); TesterBeanA beanA = new TesterBeanA(); TesterBeanB beanB = new TesterBeanB(); @@ -123,7 +123,7 @@ public class TestValueExpressionImpl { @Test public void testBug50105() { ExpressionFactory factory = ExpressionFactory.newInstance(); - ELContext context = new ELContextImpl(); + ELContext context = new ELContextImpl(factory); TesterEnum testEnum = TesterEnum.APPLE; @@ -146,7 +146,7 @@ public class TestValueExpressionImpl { @Test public void testBug51177ObjectMap() { ExpressionFactory factory = ExpressionFactory.newInstance(); - ELContext context = new ELContextImpl(); + ELContext context = new ELContextImpl(factory); Object o1 = "String value"; Object o2 = Integer.valueOf(32); @@ -173,7 +173,7 @@ public class TestValueExpressionImpl { @Test public void testBug51177ObjectList() { ExpressionFactory factory = ExpressionFactory.newInstance(); - ELContext context = new ELContextImpl(); + ELContext context = new ELContextImpl(factory); Object o1 = "String value"; Object o2 = Integer.valueOf(32); @@ -204,7 +204,7 @@ public class TestValueExpressionImpl { @Test public void testBug51544Bean() throws Exception { ExpressionFactory factory = ExpressionFactory.newInstance(); - ELContext context = new ELContextImpl(); + ELContext context = new ELContextImpl(factory); TesterBeanA beanA = new TesterBeanA(); beanA.setValList(Collections.emptyList()); @@ -227,7 +227,7 @@ public class TestValueExpressionImpl { @Test public void testBug51544Direct() throws Exception { ExpressionFactory factory = ExpressionFactory.newInstance(); - ELContext context = new ELContextImpl(); + ELContext context = new ELContextImpl(factory); List<?> list = Collections.emptyList(); Modified: tomcat/trunk/test/org/apache/el/parser/TestELParser.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/parser/TestELParser.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/el/parser/TestELParser.java (original) +++ tomcat/trunk/test/org/apache/el/parser/TestELParser.java Wed Jul 17 14:14:28 2013 @@ -63,7 +63,7 @@ public class TestELParser { @Test public void testJavaKeyWordSuffix() { ExpressionFactory factory = ExpressionFactory.newInstance(); - ELContext context = new ELContextImpl(); + ELContext context = new ELContextImpl(factory); TesterBeanA beanA = new TesterBeanA(); beanA.setInt("five"); @@ -85,7 +85,7 @@ public class TestELParser { @Test public void testJavaKeyWordIdentifier() { ExpressionFactory factory = ExpressionFactory.newInstance(); - ELContext context = new ELContextImpl(); + ELContext context = new ELContextImpl(factory); TesterBeanA beanA = new TesterBeanA(); beanA.setInt("five"); @@ -106,7 +106,7 @@ public class TestELParser { private void testExpression(String expression, String expected) { ExpressionFactory factory = ExpressionFactory.newInstance(); - ELContext context = new ELContextImpl(); + ELContext context = new ELContextImpl(factory); ValueExpression ve = factory.createValueExpression( context, expression, String.class); Modified: tomcat/trunk/test/org/apache/jasper/compiler/TestAttributeParser.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/compiler/TestAttributeParser.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/jasper/compiler/TestAttributeParser.java (original) +++ tomcat/trunk/test/org/apache/jasper/compiler/TestAttributeParser.java Wed Jul 17 14:14:28 2013 @@ -171,9 +171,9 @@ public class TestAttributeParser { private String evalAttr(String expression, char quote) { - ELContextImpl ctx = new ELContextImpl(); - ctx.setFunctionMapper(new FMapper()); ExpressionFactoryImpl exprFactory = new ExpressionFactoryImpl(); + ELContextImpl ctx = new ELContextImpl(exprFactory); + ctx.setFunctionMapper(new FMapper()); ValueExpression ve = exprFactory.createValueExpression(ctx, AttributeParser.getUnquoted(expression, quote, false, false, false), Modified: tomcat/trunk/test/org/apache/jasper/el/TestJasperELResolver.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/el/TestJasperELResolver.java?rev=1504148&r1=1504147&r2=1504148&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/jasper/el/TestJasperELResolver.java (original) +++ tomcat/trunk/test/org/apache/jasper/el/TestJasperELResolver.java Wed Jul 17 14:14:28 2013 @@ -26,6 +26,8 @@ import javax.servlet.jsp.el.ImplicitObje import org.junit.Assert; import org.junit.Test; +import org.apache.el.stream.StreamELResolverImpl; + public class TestJasperELResolver { @Test @@ -50,14 +52,15 @@ public class TestJasperELResolver { list.add(new ImplicitObjectELResolver()); } - JasperELResolver resolver = new JasperELResolver(list); + JasperELResolver resolver = + new JasperELResolver(list, new StreamELResolverImpl()); Assert.assertEquals(Integer.valueOf(count), getField("appResolversSize", resolver)); - Assert.assertEquals(7 + count, + Assert.assertEquals(8 + count, ((ELResolver[])getField("resolvers", resolver)).length); - Assert.assertEquals(Integer.valueOf(7 + count), + Assert.assertEquals(Integer.valueOf(8 + count), getField("size", resolver)); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org