You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2011/06/28 19:49:25 UTC

svn commit: r1140750 - in /tomcat/trunk: java/org/apache/catalina/core/LocalStrings.properties java/org/apache/catalina/core/StandardContextValve.java java/org/apache/catalina/core/StandardWrapperValve.java webapps/docs/changelog.xml

Author: markt
Date: Tue Jun 28 17:49:25 2011
New Revision: 1140750

URL: http://svn.apache.org/viewvc?rev=1140750&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=51436
Send 100 (Continue) response earlier to enable ServletRequestListener implementations to read the request body.
Based on a patch by Simon Olofsson.

Modified:
    tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties
    tomcat/trunk/java/org/apache/catalina/core/StandardContextValve.java
    tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties?rev=1140750&r1=1140749&r2=1140750&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties Tue Jun 28 17:49:25 2011
@@ -156,6 +156,7 @@ standardContext.urlValidate=Cannot valid
 standardContext.workPath=Exception obtaining work path for context [{0}]
 standardContext.workCreateException=Failed to determine absolute work directory from directory [{0}] and CATALINA_HOME [{1}] for context [{2}]
 standardContext.workCreateFail=Failed to create work directory [{0}] for context [{1}]
+standardContextValve.acknowledgeException=Failed to acknowledge request with a 100 (Continue) response
 standardEngine.alreadyStarted=Engine has already been started
 standardEngine.jvmRouteFail=Failed to set Engine's jvmRoute attribute from system property
 standardEngine.mappingError=MAPPING configuration error for server name {0}

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContextValve.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardContextValve.java?rev=1140750&r1=1140749&r2=1140750&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardContextValve.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardContextValve.java Tue Jun 28 17:49:25 2011
@@ -115,7 +115,7 @@ final class StandardContextValve
             || (requestPathMB.equalsIgnoreCase("/META-INF"))
             || (requestPathMB.startsWithIgnoreCase("/WEB-INF/", 0))
             || (requestPathMB.equalsIgnoreCase("/WEB-INF"))) {
-            notFound(response);
+            error(response, HttpServletResponse.SC_NOT_FOUND);
             return;
         }
 
@@ -142,17 +142,28 @@ final class StandardContextValve
         // Select the Wrapper to be used for this Request
         Wrapper wrapper = request.getWrapper();
         if (wrapper == null) {
-            notFound(response);
+            error(response, HttpServletResponse.SC_NOT_FOUND);
             return;
         } else if (wrapper.isUnavailable()) {
             // May be as a result of a reload, try and find the new wrapper
             wrapper = (Wrapper) container.findChild(wrapper.getName());
             if (wrapper == null) {
-                notFound(response);
+                error(response, HttpServletResponse.SC_NOT_FOUND);
                 return;
             }
         }
 
+        // Acknowledge the request
+        try {
+            response.sendAcknowledgement();
+        } catch (IOException ioe) {
+            container.getLogger().error(sm.getString(
+                    "standardContextValve.acknowledgeException"), ioe);
+            request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, ioe);
+            error(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+            return;
+        }
+        
         // Don't fire listeners during async processing
         // If a request init listener throws an exception, the request is
         // aborted
@@ -209,17 +220,17 @@ final class StandardContextValve
 
 
     /**
-     * Report a "not found" error for the specified resource.  FIXME:  We
+     * Report an error for the specified resource.  FIXME:  We
      * should really be using the error reporting settings for this web
      * application, but currently that code runs at the wrapper level rather
      * than the context level.
      *
      * @param response The response we are creating
      */
-    private void notFound(HttpServletResponse response) {
+    private void error(HttpServletResponse response, int status) {
 
         try {
-            response.sendError(HttpServletResponse.SC_NOT_FOUND);
+            response.sendError(status);
         } catch (IllegalStateException e) {
             // Ignore
         } catch (IOException e) {

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=1140750&r1=1140749&r2=1140750&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java Tue Jun 28 17:49:25 2011
@@ -171,22 +171,6 @@ final class StandardWrapperValve
             request.setComet(true);
         }
         
-        // Acknowledge the request
-        try {
-            response.sendAcknowledgement();
-        } catch (IOException e) {
-            container.getLogger().warn(sm.getString("standardWrapper.acknowledgeException",
-                             wrapper.getName()), e);
-            throwable = e;
-            exception(request, response, e);
-        } catch (Throwable e) {
-            ExceptionUtils.handleThrowable(e);
-            container.getLogger().error(sm.getString("standardWrapper.acknowledgeException",
-                             wrapper.getName()), e);
-            throwable = e;
-            exception(request, response, e);
-            servlet = null;
-        }
         MessageBytes requestPathMB = request.getRequestPathMB();
         DispatcherType dispatcherType = DispatcherType.REQUEST;
         if (request.getDispatcherType()==DispatcherType.ASYNC) dispatcherType = DispatcherType.ASYNC; 

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1140750&r1=1140749&r2=1140750&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Tue Jun 28 17:49:25 2011
@@ -157,6 +157,11 @@
         Fix an issue with the CrawlerSessionManagerValve that meant sessions
         were not always correctly tracked. (markt)
       </fix>
+      <fix>
+        <bug>51436</bug>: Send 100 (Continue) response earlier to enable
+        ServletRequestListener implementations to read the request body. Based
+        on a patch by Simon Olofsson. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">



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