Author: violetagg
Date: Fri Mar 25 19:42:02 2016
New Revision: 1736648
URL: http://svn.apache.org/viewvc?rev=1736648&view=rev
Log:
Merged revision 1736646 from tomcat/trunk:
Ensure that ServletRequest and ServletResponse provided during AsyncListener
registration are made available via AsyncEvent.getSuppliedRequest and
AsyncEvent.getSuppliedResponse
Modified:
tomcat/tc8.5.x/trunk/ (props changed)
tomcat/tc8.5.x/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
tomcat/tc8.5.x/trunk/java/org/apache/catalina/core/AsyncListenerWrapper.java
tomcat/tc8.5.x/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java
tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml
Propchange: tomcat/tc8.5.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Mar 25 19:42:02 2016
@@ -1 +1 @@
-/tomcat/trunk:1734785,1734799,1734845,1734928,1735041,1735044,1735480,1735577,1735597,1735599-1735600,1735615,1736145,1736162,1736209,1736280,1736297,1736299,1736489
+/tomcat/trunk:1734785,1734799,1734845,1734928,1735041,1735044,1735480,1735577,1735597,1735599-1735600,1735615,1736145,1736162,1736209,1736280,1736297,1736299,1736489,1736646
Modified:
tomcat/tc8.5.x/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/catalina/core/AsyncContextImpl.java?rev=1736648&r1=1736647&r2=1736648&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
(original)
+++ tomcat/tc8.5.x/trunk/java/org/apache/catalina/core/AsyncContextImpl.java
Fri Mar 25 19:42:02 2016
@@ -272,6 +272,8 @@ public class AsyncContextImpl implements
check();
AsyncListenerWrapper wrapper = new AsyncListenerWrapper();
wrapper.setListener(listener);
+ wrapper.setServletRequest(servletRequest);
+ wrapper.setServletResponse(servletResponse);
listeners.add(wrapper);
}
Modified:
tomcat/tc8.5.x/trunk/java/org/apache/catalina/core/AsyncListenerWrapper.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/catalina/core/AsyncListenerWrapper.java?rev=1736648&r1=1736647&r2=1736648&view=diff
==============================================================================
---
tomcat/tc8.5.x/trunk/java/org/apache/catalina/core/AsyncListenerWrapper.java
(original)
+++
tomcat/tc8.5.x/trunk/java/org/apache/catalina/core/AsyncListenerWrapper.java
Fri Mar 25 19:42:02 2016
@@ -20,29 +20,33 @@ import java.io.IOException;
import javax.servlet.AsyncEvent;
import javax.servlet.AsyncListener;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
public class AsyncListenerWrapper {
private AsyncListener listener = null;
+ private ServletRequest servletRequest = null;
+ private ServletResponse servletResponse = null;
public void fireOnStartAsync(AsyncEvent event) throws IOException {
- listener.onStartAsync(event);
+ listener.onStartAsync(customizeEvent(event));
}
public void fireOnComplete(AsyncEvent event) throws IOException {
- listener.onComplete(event);
+ listener.onComplete(customizeEvent(event));
}
public void fireOnTimeout(AsyncEvent event) throws IOException {
- listener.onTimeout(event);
+ listener.onTimeout(customizeEvent(event));
}
public void fireOnError(AsyncEvent event) throws IOException {
- listener.onError(event);
+ listener.onError(customizeEvent(event));
}
@@ -56,4 +60,22 @@ public class AsyncListenerWrapper {
}
+ public void setServletRequest(ServletRequest servletRequest) {
+ this.servletRequest = servletRequest;
+ }
+
+
+ public void setServletResponse(ServletResponse servletResponse) {
+ this.servletResponse = servletResponse;
+ }
+
+
+ private AsyncEvent customizeEvent(AsyncEvent event) {
+ if (servletRequest != null && servletResponse != null) {
+ return new AsyncEvent(event.getAsyncContext(), servletRequest,
servletResponse,
+ event.getThrowable());
+ } else {
+ return event;
+ }
+ }
}
Modified:
tomcat/tc8.5.x/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java
URL:
http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java?rev=1736648&r1=1736647&r2=1736648&view=diff
==============================================================================
---
tomcat/tc8.5.x/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java
(original)
+++
tomcat/tc8.5.x/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java
Fri Mar 25 19:42:02 2016
@@ -52,11 +52,15 @@ import org.junit.Test;
import org.apache.catalina.Context;
import org.apache.catalina.Wrapper;
+import org.apache.catalina.connector.Request;
+import org.apache.catalina.connector.Response;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.startup.TomcatBaseTest;
import org.apache.catalina.valves.TesterAccessLogValve;
+import org.apache.tomcat.unittest.TesterContext;
import org.apache.tomcat.util.buf.ByteChunk;
import org.apache.tomcat.util.descriptor.web.ErrorPage;
+import org.easymock.EasyMock;
public class TestAsyncContextImpl extends TomcatBaseTest {
@@ -2358,4 +2362,49 @@ public class TestAsyncContextImpl extend
}
}
+
+
+ @Test
+ public void testAsyncListenerSupplyRequestResponse() {
+ final ServletRequest servletRequest =
EasyMock.createMock(ServletRequest.class);
+ final ServletResponse servletResponse =
EasyMock.createMock(ServletResponse.class);
+ final AsyncListener listener = new AsyncListener() {
+
+ @Override
+ public void onTimeout(AsyncEvent event) throws IOException {
+ checkRequestResponse(event);
+ }
+
+ @Override
+ public void onStartAsync(AsyncEvent event) throws IOException {
+ checkRequestResponse(event);
+ }
+
+ @Override
+ public void onError(AsyncEvent event) throws IOException {
+ checkRequestResponse(event);
+ }
+
+ @Override
+ public void onComplete(AsyncEvent event) throws IOException {
+ checkRequestResponse(event);
+ }
+
+ private void checkRequestResponse(AsyncEvent event) {
+ assertEquals(servletRequest, event.getSuppliedRequest());
+ assertEquals(servletResponse, event.getSuppliedResponse());
+ }
+ };
+ final Context context = new TesterContext();
+ final Response response = new Response();
+ final Request request = new Request();
+ request.setCoyoteRequest(new org.apache.coyote.Request());
+ request.getMappingData().context = context;
+ final AsyncContextImpl ac = new AsyncContextImpl(request);
+ ac.addListener(listener, servletRequest, servletResponse);
+ ac.setStarted(context, request, response, true);
+ ac.addListener(listener, servletRequest, servletResponse);
+ ac.setErrorState(new Exception(), true);
+ ac.fireOnComplete();
+ }
}
Modified: tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml?rev=1736648&r1=1736647&r2=1736648&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml Fri Mar 25 19:42:02 2016
@@ -66,6 +66,14 @@
<bug>59213</bug>: Async dispatches should be based off a wrapped
request.
(remm)
</fix>
+ <fix>
+ Ensure that <code>javax.servlet.ServletRequest</code> and
+ <code>javax.servlet.ServletResponse</code> provided during
+ <code>javax.servlet.AsyncListener</code> registration are made
+ available via <code>javax.servlet.AsyncEvent.getSuppliedRequest</code>
+ and <code>javax.servlet.AsyncEvent.getSuppliedResponse</code>
+ (violetagg)
+ </fix>
</changelog>
</subsection>
<subsection name="WebSocket">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]