Author: markt
Date: Thu Aug 6 18:17:35 2015
New Revision: 1694548
URL: http://svn.apache.org/r1694548
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=58178
Fix the second part of this bug - El and imports for tag files.
Added:
tomcat/trunk/test/webapp/WEB-INF/tags/bug58178b.tag
tomcat/trunk/test/webapp/bug5nnnn/bug58178b.jsp (with props)
Modified:
tomcat/trunk/java/org/apache/jasper/compiler/Generator.java
tomcat/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java
tomcat/trunk/test/org/apache/jasper/runtime/TestJspContextWrapper.java
tomcat/trunk/test/webapp/WEB-INF/tags/bug58178.tag
tomcat/trunk/test/webapp/bug5nnnn/bug58178.jsp
Modified: tomcat/trunk/java/org/apache/jasper/compiler/Generator.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/Generator.java?rev=1694548&r1=1694547&r2=1694548&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/Generator.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/Generator.java Thu Aug 6
18:17:35 2015
@@ -3631,13 +3631,14 @@ class Generator {
out.printin("public final class ");
out.println(className);
out.printil(" extends javax.servlet.jsp.tagext.SimpleTagSupport");
- out.printin(" implements
org.apache.jasper.runtime.JspSourceDependent");
+ out.printin(" implements
org.apache.jasper.runtime.JspSourceDependent,");
+ out.println();
+ out.printin("
org.apache.jasper.runtime.JspSourceImports");
if (tagInfo.hasDynamicAttributes()) {
out.println(",");
out.printin("
javax.servlet.jsp.tagext.DynamicAttributes");
}
out.println(" {");
- out.println();
out.pushIndent();
/*
@@ -3906,9 +3907,9 @@ class Generator {
out.println(");");
}
if (aliasSeen) {
- out.printil("this.jspContext = new
org.apache.jasper.runtime.JspContextWrapper(ctx, _jspx_nested, _jspx_at_begin,
_jspx_at_end, aliasMap);");
+ out.printil("this.jspContext = new
org.apache.jasper.runtime.JspContextWrapper(this, ctx, _jspx_nested,
_jspx_at_begin, _jspx_at_end, aliasMap);");
} else {
- out.printil("this.jspContext = new
org.apache.jasper.runtime.JspContextWrapper(ctx, _jspx_nested, _jspx_at_begin,
_jspx_at_end, null);");
+ out.printil("this.jspContext = new
org.apache.jasper.runtime.JspContextWrapper(this, ctx, _jspx_nested,
_jspx_at_begin, _jspx_at_end, null);");
}
out.popIndent();
out.printil("}");
Modified: tomcat/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java?rev=1694548&r1=1694547&r2=1694548&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java
(original)
+++ tomcat/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java Thu Aug
6 18:17:35 2015
@@ -26,6 +26,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Set;
import javax.el.ELContext;
import javax.el.ELResolver;
@@ -47,6 +48,7 @@ import javax.servlet.jsp.el.ELException;
import javax.servlet.jsp.el.ExpressionEvaluator;
import javax.servlet.jsp.el.VariableResolver;
import javax.servlet.jsp.tagext.BodyContent;
+import javax.servlet.jsp.tagext.JspTag;
import javax.servlet.jsp.tagext.VariableInfo;
import org.apache.jasper.compiler.Localizer;
@@ -66,6 +68,8 @@ import org.apache.jasper.compiler.Locali
@SuppressWarnings("deprecation") // Have to support old JSP EL API
public class JspContextWrapper extends PageContext implements VariableResolver
{
+ private final JspTag jspTag;
+
// Invoking JSP context
private final PageContext invokingJspCtxt;
@@ -90,9 +94,10 @@ public class JspContextWrapper extends P
private final PageContext rootJspCtxt;
- public JspContextWrapper(JspContext jspContext,
+ public JspContextWrapper(JspTag jspTag, JspContext jspContext,
ArrayList<String> nestedVars, ArrayList<String> atBeginVars,
ArrayList<String> atEndVars, Map<String,String> aliases) {
+ this.jspTag = jspTag;
this.invokingJspCtxt = (PageContext) jspContext;
if (jspContext instanceof JspContextWrapper) {
rootJspCtxt = ((JspContextWrapper)jspContext).rootJspCtxt;
@@ -502,7 +507,7 @@ public class JspContextWrapper extends P
@Override
public ELContext getELContext() {
if (elContext == null) {
- elContext = new ELContextWrapper(rootJspCtxt.getELContext(), this);
+ elContext = new ELContextWrapper(rootJspCtxt.getELContext(),
jspTag, this);
}
return elContext;
}
@@ -511,10 +516,13 @@ public class JspContextWrapper extends P
static class ELContextWrapper extends ELContext {
private final ELContext wrapped;
+ private final JspTag jspTag;
private final PageContext pageContext;
+ private ImportHandler importHandler;
- private ELContextWrapper(ELContext wrapped, PageContext pageContext) {
+ private ELContextWrapper(ELContext wrapped, JspTag jspTag, PageContext
pageContext) {
this.wrapped = wrapped;
+ this.jspTag = jspTag;
this.pageContext = pageContext;
}
@@ -552,7 +560,25 @@ public class JspContextWrapper extends P
@Override
public ImportHandler getImportHandler() {
- return wrapped.getImportHandler();
+ if (importHandler == null) {
+ importHandler = new ImportHandler();
+ if (jspTag instanceof JspSourceImports) {
+ Set<String> packageImports = ((JspSourceImports)
jspTag).getPackageImports();
+ if (packageImports != null) {
+ for (String packageImport : packageImports) {
+ importHandler.importPackage(packageImport);
+ }
+ }
+ Set<String> classImports = ((JspSourceImports)
jspTag).getClassImports();
+ if (classImports != null) {
+ for (String classImport : classImports) {
+ importHandler.importClass(classImport);
+ }
+ }
+ }
+
+ }
+ return importHandler;
}
@Override
Modified: tomcat/trunk/test/org/apache/jasper/runtime/TestJspContextWrapper.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/runtime/TestJspContextWrapper.java?rev=1694548&r1=1694547&r2=1694548&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/jasper/runtime/TestJspContextWrapper.java
(original)
+++ tomcat/trunk/test/org/apache/jasper/runtime/TestJspContextWrapper.java Thu
Aug 6 18:17:35 2015
@@ -1,12 +1,33 @@
+/*
+ * 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.
+ */
package org.apache.jasper.runtime;
+import java.math.BigDecimal;
+import java.util.Collections;
+
+import javax.servlet.DispatcherType;
import javax.servlet.http.HttpServletResponse;
-import org.apache.catalina.startup.TomcatBaseTest;
-import org.apache.tomcat.util.buf.ByteChunk;
import org.junit.Assert;
import org.junit.Test;
+import org.apache.catalina.startup.TomcatBaseTest;
+import org.apache.tomcat.util.buf.ByteChunk;
+
public class TestJspContextWrapper extends TomcatBaseTest {
@Test
@@ -24,7 +45,25 @@ public class TestJspContextWrapper exten
Assert.assertTrue(result, result.contains("PASS"));
}
- public void testELTagFileImports() {
+ @Test
+ public void testELTagFileImports() throws Exception {
+ getTomcatInstanceTestWebapp(false, true);
+
+ ByteChunk out = new ByteChunk();
+
+ int rc = getUrl("http://localhost:" + getPort() +
"/test/bug5nnnn/bug58178b.jsp", out, null);
+
+ Assert.assertEquals(HttpServletResponse.SC_OK, rc);
+
+ String result = out.toString();
+ Assert.assertTrue(result, result.contains("00-" +
DispatcherType.ASYNC));
+ // No obvious status fields for javax.servlet.http
+ // Could hack something with HttpUtils...
+ // No obvious status fields for javax.servlet.jsp
+ // Wild card (package) import
+ Assert.assertTrue(result, result.contains("01-" +
BigDecimal.ROUND_UP));
+ // Class import
+ Assert.assertTrue(result, result.contains("02-" +
Collections.EMPTY_LIST.size()));
}
}
Modified: tomcat/trunk/test/webapp/WEB-INF/tags/bug58178.tag
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/webapp/WEB-INF/tags/bug58178.tag?rev=1694548&r1=1694547&r2=1694548&view=diff
==============================================================================
--- tomcat/trunk/test/webapp/WEB-INF/tags/bug58178.tag (original)
+++ tomcat/trunk/test/webapp/WEB-INF/tags/bug58178.tag Thu Aug 6 18:17:35 2015
@@ -1,9 +1,25 @@
+<%--
+ 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 prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:catch var="error">
<jsp:doBody/>
</c:catch>
-
+
<c:if test="${error != null}">
<p>PASS<br/>
Error detected<br/>
Added: tomcat/trunk/test/webapp/WEB-INF/tags/bug58178b.tag
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/webapp/WEB-INF/tags/bug58178b.tag?rev=1694548&view=auto
==============================================================================
--- tomcat/trunk/test/webapp/WEB-INF/tags/bug58178b.tag (added)
+++ tomcat/trunk/test/webapp/WEB-INF/tags/bug58178b.tag Thu Aug 6 18:17:35 2015
@@ -0,0 +1,20 @@
+<%--
+ 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.
+--%>
+<%@tag import="java.math.*, java.util.Collections" %>
+<p>00-${DispatcherType.ASYNC}</p>
+<p>01-${BigDecimal.ROUND_UP}</p>
+<p>02-${Collections.EMPTY_LIST.stream().count()}</p>
\ No newline at end of file
Modified: tomcat/trunk/test/webapp/bug5nnnn/bug58178.jsp
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/webapp/bug5nnnn/bug58178.jsp?rev=1694548&r1=1694547&r2=1694548&view=diff
==============================================================================
--- tomcat/trunk/test/webapp/bug5nnnn/bug58178.jsp (original)
+++ tomcat/trunk/test/webapp/bug5nnnn/bug58178.jsp Thu Aug 6 18:17:35 2015
@@ -1,3 +1,19 @@
+<%--
+ 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" %>
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
Added: tomcat/trunk/test/webapp/bug5nnnn/bug58178b.jsp
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/webapp/bug5nnnn/bug58178b.jsp?rev=1694548&view=auto
==============================================================================
--- tomcat/trunk/test/webapp/bug5nnnn/bug58178b.jsp (added)
+++ tomcat/trunk/test/webapp/bug5nnnn/bug58178b.jsp Thu Aug 6 18:17:35 2015
@@ -0,0 +1,21 @@
+<%--
+ 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 prefix="tags" tagdir="/WEB-INF/tags" %>
+<html>
+<body>
+<tags:bug58178b />
+</html>
\ No newline at end of file
Propchange: tomcat/trunk/test/webapp/bug5nnnn/bug58178b.jsp
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]