Author: markt
Date: Tue Mar 7 10:51:55 2017
New Revision: 1785823
URL: http://svn.apache.org/viewvc?rev=1785823&view=rev
Log:
Follow up to the fix for bug 58178. When creating the ELContext for a tag file,
ensure that any registered ELContextListeners are fired.
Added:
tomcat/trunk/test/webapp/bug5nnnn/bug58178c.jsp
Modified:
tomcat/trunk/java/org/apache/jasper/runtime/JspApplicationContextImpl.java
tomcat/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java
tomcat/trunk/test/org/apache/jasper/runtime/TestJspContextWrapper.java
tomcat/trunk/webapps/docs/changelog.xml
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=1785823&r1=1785822&r2=1785823&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/runtime/JspApplicationContextImpl.java
(original)
+++ tomcat/trunk/java/org/apache/jasper/runtime/JspApplicationContextImpl.java
Tue Mar 7 10:51:55 2017
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.List;
import javax.el.CompositeELResolver;
+import javax.el.ELContext;
import javax.el.ELContextEvent;
import javax.el.ELContextListener;
import javax.el.ELResolver;
@@ -101,12 +102,16 @@ public class JspApplicationContextImpl i
ctx.putContext(JspContext.class, context);
// alert all ELContextListeners
- ELContextEvent event = new ELContextEvent(ctx);
+ fireListeners(ctx);
+
+ return ctx;
+ }
+
+ protected void fireListeners(ELContext elContext) {
+ ELContextEvent event = new ELContextEvent(elContext);
for (int i = 0; i < this.contextListeners.size(); i++) {
this.contextListeners.get(i).contextCreated(event);
}
-
- return ctx;
}
private ELResolver createELResolver() {
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=1785823&r1=1785822&r2=1785823&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java
(original)
+++ tomcat/trunk/java/org/apache/jasper/runtime/JspContextWrapper.java Tue Mar
7 10:51:55 2017
@@ -41,7 +41,9 @@ import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpSession;
+import javax.servlet.jsp.JspApplicationContext;
import javax.servlet.jsp.JspContext;
+import javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.el.ELException;
@@ -508,6 +510,11 @@ public class JspContextWrapper extends P
public ELContext getELContext() {
if (elContext == null) {
elContext = new ELContextWrapper(rootJspCtxt.getELContext(),
jspTag, this);
+ JspFactory factory = JspFactory.getDefaultFactory();
+ JspApplicationContext jspAppCtxt =
factory.getJspApplicationContext(servletContext);
+ if (jspAppCtxt instanceof JspApplicationContextImpl) {
+ ((JspApplicationContextImpl)
jspAppCtxt).fireListeners(elContext);
+ }
}
return elContext;
}
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=1785823&r1=1785822&r2=1785823&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/jasper/runtime/TestJspContextWrapper.java
(original)
+++ tomcat/trunk/test/org/apache/jasper/runtime/TestJspContextWrapper.java Tue
Mar 7 10:51:55 2017
@@ -66,4 +66,20 @@ public class TestJspContextWrapper exten
// Class import
Assert.assertTrue(result, result.contains("02-" +
Collections.EMPTY_LIST.size()));
}
+
+ @Test
+ public void testELTagFileELContextListener() throws Exception {
+ getTomcatInstanceTestWebapp(false, true);
+
+ ByteChunk out = new ByteChunk();
+
+ int rc = getUrl("http://localhost:" + getPort() +
"/test/bug5nnnn/bug58178c.jsp", out, null);
+
+ Assert.assertEquals(HttpServletResponse.SC_OK, rc);
+
+ String result = out.toString();
+
+ Assert.assertTrue(result, result.contains("JSP count: 1"));
+ Assert.assertTrue(result, result.contains("Tag count: 1"));
+ }
}
Added: tomcat/trunk/test/webapp/bug5nnnn/bug58178c.jsp
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/webapp/bug5nnnn/bug58178c.jsp?rev=1785823&view=auto
==============================================================================
--- tomcat/trunk/test/webapp/bug5nnnn/bug58178c.jsp (added)
+++ tomcat/trunk/test/webapp/bug5nnnn/bug58178c.jsp Tue Mar 7 10:51:55 2017
@@ -0,0 +1,65 @@
+<%--
+ 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" %>
+<%!
+static class TestListener implements javax.el.ELContextListener {
+
+ private int jspCount = 0;
+ private int tagCount = 0;
+
+ @Override
+ public void contextCreated(javax.el.ELContextEvent event) {
+ javax.el.ELContext elContext = event.getELContext();
+ if (elContext instanceof org.apache.jasper.el.ELContextImpl) {
+ jspCount++;
+ } else {
+ tagCount++;
+ }
+ (new Exception()).printStackTrace();
+ }
+
+ public int getJspCount() {
+ return jspCount;
+ }
+
+ public int getTagCount() {
+ return tagCount;
+ }
+}
+
+static TestListener listener = new TestListener();
+
+private boolean listenerAdded;
+%>
+<%
+synchronized(this) {
+ if (!listenerAdded) {
+ JspFactory factory = JspFactory.getDefaultFactory();
+ JspApplicationContext jspApplicationContext =
factory.getJspApplicationContext(application);
+ jspApplicationContext.addELContextListener(listener);
+ listenerAdded = true;
+ }
+}
+%>
+<html>
+<body>
+<p>JSP count: <%= listener.getJspCount() %></p>
+<p>Tag count: <%= listener.getTagCount() %></p>
+<tags:bug58178b />
+<p>JSP count: <%= listener.getJspCount() %></p>
+<p>Tag count: <%= listener.getTagCount() %></p>
+</html>
\ No newline at end of file
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1785823&r1=1785822&r2=1785823&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Tue Mar 7 10:51:55 2017
@@ -240,6 +240,11 @@
<subsection name="Jasper">
<changelog>
<fix>
+ Follow up to the fix for <bug>58178</bug>. When creating the
+ <code>ELContext</code> for a tag file, ensure that any registered
+ <code>ELContextListener</code>s are fired. (markt)
+ </fix>
+ <fix>
Refactor code generated for JSPs to reduce the size of the code
required
for tags. (markt)
</fix>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]