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: [email protected]
For additional commands, e-mail: [email protected]