You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2014/11/12 18:25:39 UTC

svn commit: r1638875 - in /sling/trunk: bundles/engine/src/main/java/org/apache/sling/engine/impl/ launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolver/errorhandler/

Author: bdelacretaz
Date: Wed Nov 12 17:25:38 2014
New Revision: 1638875

URL: http://svn.apache.org/r1638875
Log:
SLING-4143 - preserve original HTTP status and message if error handling script fails

Modified:
    sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java
    sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolver/errorhandler/ErrorHandlingTest.java

Modified: sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java?rev=1638875&r1=1638874&r2=1638875&view=diff
==============================================================================
--- sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java (original)
+++ sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/DefaultErrorHandler.java Wed Nov 12 17:25:38 2014
@@ -64,11 +64,11 @@ public class DefaultErrorHandler impleme
         return delegate;
     }
     
-    private void delegateFailed(Throwable t, HttpServletRequest request, HttpServletResponse response) throws IOException {
-        final String m = t.getClass().getSimpleName() + " in ErrorHandler";
+    private void delegateFailed(int originalStatus, String originalMessage, Throwable t, HttpServletRequest request, HttpServletResponse response) throws IOException {
         // don't include Throwable in the response, gives too much information
+        final String m = "Error handler failed:" + t.getClass().getName();
         log.error(m, t);
-        sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, m, null, request, response);
+        sendError(originalStatus, originalMessage, null, request, response);
     }
 
     // ---------- ErrorHandler interface (default implementation) --------------
@@ -95,9 +95,9 @@ public class DefaultErrorHandler impleme
             try {
                 delegate.handleError(status, message, request, response);
             } catch(Exception e) {
-                delegateFailed(e, request, response);
+                delegateFailed(status, message, e, request, response);
             } catch(Error r) {
-                delegateFailed(r, request, response);
+                delegateFailed(status, message, r, request, response);
             }
             return;
         }
@@ -126,19 +126,20 @@ public class DefaultErrorHandler impleme
             final SlingHttpServletRequest request,
             final SlingHttpServletResponse response)
     throws IOException {
+        final int status = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
         // If we have a delegate let it handle the error 
         if(delegate != null) {
             try {
                 delegate.handleError(throwable, request, response);
             } catch(Exception e) {
-                delegateFailed(e, request, response);
+                delegateFailed(status, throwable.toString(), e, request, response);
             } catch(Error r) {
-                delegateFailed(r, request, response);
+                delegateFailed(status, throwable.toString(), r, request, response);
             }
             return;
         }
         
-        sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+        sendError(status,
             throwable.getMessage(), throwable, request, response);
     }
 

Modified: sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolver/errorhandler/ErrorHandlingTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolver/errorhandler/ErrorHandlingTest.java?rev=1638875&r1=1638874&r2=1638875&view=diff
==============================================================================
--- sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolver/errorhandler/ErrorHandlingTest.java (original)
+++ sling/trunk/launchpad/integration-tests/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/servlets/resolver/errorhandler/ErrorHandlingTest.java Wed Nov 12 17:25:38 2014
@@ -136,15 +136,15 @@ public class ErrorHandlingTest extends R
     }
 
     public void test_421_exception() throws Throwable{
-        final String expected = "IOException in ErrorHandler";
+        final String expected = "421 from rendering script";
         final String url =  testNodePath + SELECTOR_421 + ".errorScriptException.html"; 
-        assertWithRetries(url, 500, expected);
+        assertWithRetries(url, 421, expected);
     }
 
     public void test_421_error() throws Throwable{
-        final String expected = "IOException in ErrorHandler";
+        final String expected = "421 from rendering script";
         final String url =  testNodePath + SELECTOR_421 + ".errorScriptError.html"; 
-        assertWithRetries(url, 500, expected);
+        assertWithRetries(url, 421, expected);
     }
 
 	public void test_throwable_errorhandling() throws Throwable{