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: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to