WICKET-5152 Improve Wicket behavior in Servlet 3 async context

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e44c2850
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e44c2850
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e44c2850

Branch: refs/heads/master
Commit: e44c2850e1ae607136c13d3c78498738719390f6
Parents: 4f45b19
Author: Martin Tzvetanov Grigorov <[email protected]>
Authored: Wed May 1 10:40:53 2013 +0200
Committer: Martin Tzvetanov Grigorov <[email protected]>
Committed: Wed May 1 10:40:53 2013 +0200

----------------------------------------------------------------------
 .../apache/wicket/protocol/http/WicketFilter.java  |    8 ++++----
 .../protocol/http/servlet/ServletWebResponse.java  |    7 ++++++-
 2 files changed, 10 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/e44c2850/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java 
b/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
index f40a0c9..0ce7a2a 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
@@ -146,6 +146,9 @@ public class WicketFilter implements Filter
                final ClassLoader previousClassLoader = 
Thread.currentThread().getContextClassLoader();
                final ClassLoader newClassLoader = getClassLoader();
 
+               HttpServletRequest httpServletRequest = 
(HttpServletRequest)request;
+               HttpServletResponse httpServletResponse = 
(HttpServletResponse)response;
+
                try
                {
                        if (previousClassLoader != newClassLoader)
@@ -153,9 +156,6 @@ public class WicketFilter implements Filter
                                
Thread.currentThread().setContextClassLoader(newClassLoader);
                        }
 
-                       HttpServletRequest httpServletRequest = 
(HttpServletRequest)request;
-                       HttpServletResponse httpServletResponse = 
(HttpServletResponse)response;
-
                        // Make sure getFilterPath() gets called before 
checkIfRedirectRequired()
                        String filterPath = getFilterPath(httpServletRequest);
 
@@ -229,7 +229,7 @@ public class WicketFilter implements Filter
                                
Thread.currentThread().setContextClassLoader(previousClassLoader);
                        }
 
-                       if (response.isCommitted())
+                       if (response.isCommitted() && 
httpServletRequest.isAsyncStarted() == false)
                        {
                                response.flushBuffer();
                        }

http://git-wip-us.apache.org/repos/asf/wicket/blob/e44c2850/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
 
b/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
index c5fd540..61bb9ef 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
@@ -19,6 +19,7 @@ package org.apache.wicket.protocol.http.servlet;
 import java.io.IOException;
 
 import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.wicket.WicketRuntimeException;
@@ -285,7 +286,11 @@ public class ServletWebResponse extends WebResponse
        {
                try
                {
-                       httpServletResponse.flushBuffer();
+                       HttpServletRequest httpServletRequest = 
webRequest.getContainerRequest();
+                       if (httpServletRequest.isAsyncStarted() == false)
+                       {
+                               httpServletResponse.flushBuffer();
+                       }
                }
                catch (IOException e)
                {

Reply via email to