Author: markt
Date: Thu Apr  7 16:19:55 2016
New Revision: 1738149

URL: http://svn.apache.org/viewvc?rev=1738149&view=rev
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=59261
ServletRequest.getAsyncContext() now throws an IllegalStateException as 
required by the Servlet specification if the request is not in asynchronous 
mode when called.

Modified:
    tomcat/trunk/java/javax/servlet/ServletRequest.java
    tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
    tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties
    tomcat/trunk/java/org/apache/catalina/connector/Request.java
    tomcat/trunk/java/org/apache/catalina/core/ApplicationDispatcher.java
    tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/javax/servlet/ServletRequest.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/servlet/ServletRequest.java?rev=1738149&r1=1738148&r2=1738149&view=diff
==============================================================================
--- tomcat/trunk/java/javax/servlet/ServletRequest.java (original)
+++ tomcat/trunk/java/javax/servlet/ServletRequest.java Thu Apr  7 16:19:55 2016
@@ -481,9 +481,14 @@ public interface ServletRequest {
     public boolean isAsyncSupported();
 
     /**
-     * @return TODO
+     * Get the current AsyncContext.
+     *
+     * @return The current AsyncContext
+     *
      * @throws IllegalStateException if the request is not in asynchronous mode
-     * @since Servlet 3.0 TODO SERVLET3 - Add comments
+     *         (i.e. @link #isAsyncStarted() is {@code false})
+     *
+     * @since Servlet 3.0
      */
     public AsyncContext getAsyncContext();
 

Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?rev=1738149&r1=1738148&r2=1738149&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Thu Apr  
7 16:19:55 2016
@@ -136,7 +136,7 @@ public class CoyoteAdapter implements Ad
                     "Dispatch may only happen on an existing request.");
         }
         boolean success = true;
-        AsyncContextImpl asyncConImpl = 
(AsyncContextImpl)request.getAsyncContext();
+        AsyncContextImpl asyncConImpl = request.getAsyncContextInternal();
         
req.getRequestProcessor().setWorkerThreadName(Thread.currentThread().getName());
         try {
             if (!request.isAsync()) {

Modified: 
tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties?rev=1738149&r1=1738148&r2=1738149&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties 
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/LocalStrings.properties Thu 
Apr  7 16:19:55 2016
@@ -71,6 +71,7 @@ outputBuffer.writeNull=The String argume
 
 request.asyncNotSupported=A filter or servlet of the current chain does not 
support asynchronous operations.
 request.illegalWrap=The request wrapper must wrap the request obtained from 
getRequest()
+request.notAsync=It is illegal to call this method if the current request is 
not in asynchronous mode (i.e. isAsyncStarted() returns false)
 
 requestFacade.nullRequest=The request object has been recycled and is no 
longer associated with this facade
 

Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=1738149&r1=1738148&r2=1738149&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Thu Apr  7 
16:19:55 2016
@@ -412,7 +412,7 @@ public class Request implements HttpServ
     /**
      * AsyncContext
      */
-    protected volatile AsyncContextImpl asyncContext = null;
+    private volatile AsyncContextImpl asyncContext = null;
 
     protected Boolean asyncSupported = null;
 
@@ -1695,7 +1695,14 @@ public class Request implements HttpServ
 
     @Override
     public AsyncContext getAsyncContext() {
-        return this.asyncContext;
+        if (!isAsyncStarted()) {
+            throw new IllegalStateException(sm.getString("request.notAsync"));
+        }
+        return asyncContext;
+    }
+
+    public AsyncContextImpl getAsyncContextInternal() {
+        return asyncContext;
     }
 
     @Override

Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationDispatcher.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationDispatcher.java?rev=1738149&r1=1738148&r2=1738149&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ApplicationDispatcher.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/ApplicationDispatcher.java Thu 
Apr  7 16:19:55 2016
@@ -375,7 +375,7 @@ final class ApplicationDispatcher implem
             processRequest(request,response,state);
         }
 
-        if (request.getAsyncContext() != null) {
+        if (request.isAsyncStarted()) {
             // An async request was started during the forward, don't close the
             // response as it may be written to during the async handling
             return;

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java?rev=1738149&r1=1738148&r2=1738149&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java Thu 
Apr  7 16:19:55 2016
@@ -180,7 +180,7 @@ final class StandardWrapperValve
                     try {
                         SystemLogHandler.startCapture();
                         if (request.isAsyncDispatching()) {
-                            
((AsyncContextImpl)request.getAsyncContext()).doInternalDispatch();
+                            
request.getAsyncContextInternal().doInternalDispatch();
                         } else {
                             filterChain.doFilter(request.getRequest(),
                                     response.getResponse());
@@ -193,7 +193,7 @@ final class StandardWrapperValve
                     }
                 } else {
                     if (request.isAsyncDispatching()) {
-                        
((AsyncContextImpl)request.getAsyncContext()).doInternalDispatch();
+                        request.getAsyncContextInternal().doInternalDispatch();
                     } else {
                         filterChain.doFilter
                             (request.getRequest(), response.getResponse());

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1738149&r1=1738148&r2=1738149&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Thu Apr  7 16:19:55 2016
@@ -108,6 +108,12 @@
         <code>TransientAttribute</code>. (kfujino)
       </fix>
       <fix>
+        <bug>59261</bug>: <code>ServletRequest.getAsyncContext()</code> now
+        throws an <code>IllegalStateException</code> as required by the Servlet
+        specification if the request is not in asynchronous mode when called.
+        (markt)
+      </fix>
+      <fix>
         <bug>59269</bug>: Correct the implementation of
         <code>PersistentManagerBase</code> so that <code>minIdleSwap</code>
         functions as designed and sessions are swapped out to keep the active



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to