diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java b/src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java
index 12044bb..a4e9498 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java
@@ -164,7 +164,15 @@
                 jsonGenerator.write("servletName", servletName);
             }
 
-            String exceptionType = (String)req.getAttribute(SlingConstants.ERROR_EXCEPTION_TYPE);
+            // SLING-10615 - for backward compatibility check for either a
+            // String or Class value
+            Object exceptionTypeObj = req.getAttribute(SlingConstants.ERROR_EXCEPTION_TYPE);
+            String exceptionType = null;
+            if (exceptionTypeObj instanceof String) {
+                exceptionType = (String)exceptionTypeObj;
+            } else if (exceptionTypeObj instanceof Class) {
+                exceptionType = ((Class<?>)exceptionTypeObj).getName();
+            }
             if (exceptionType != null && !exceptionType.isEmpty()) {
                 jsonGenerator.write("exceptionType", exceptionType);
             }
diff --git a/src/test/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServletTest.java b/src/test/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServletTest.java
index 1ec9f7c..4a91034 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServletTest.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServletTest.java
@@ -44,10 +44,7 @@
  */
 public class DefaultErrorHandlerServletTest {
 
-    @Test
-    public void testJsonErrorResponse() throws IOException, ServletException {
-        // mock a request that accepts a json response
-        MockSlingHttpServletRequest req = new MockErrorSlingHttpServletRequest("application/json,*/*;q=0.9");
+    protected void assertJsonErrorResponse(MockSlingHttpServletRequest req) throws ServletException, IOException {
         MockSlingHttpServletResponse res = new MockErrorSlingHttpServletResponse(false);
 
         DefaultErrorHandlerServlet errorServlet = new DefaultErrorHandlerServlet();
@@ -69,7 +66,34 @@
             assertTrue(jsonObj.getString("exception").contains("Test Exception"));
             assertEquals(Exception.class.getName(), jsonObj.getString("exceptionType"));
         }
+    }
 
+    @Test
+    public void testJsonErrorResponse() throws IOException, ServletException {
+        // mock a request that accepts a json response
+        MockSlingHttpServletRequest req = new MockErrorSlingHttpServletRequest("application/json,*/*;q=0.9");
+        assertJsonErrorResponse(req);
+    }
+
+    /**
+     * SLING-10615 - Verify that if the SlingConstants.ERROR_EXCEPTION_TYPE happens to be a
+     * Class object instead of a String, it still produces a valid error response
+     */
+    @Test
+    public void testJsonErrorResponseWithClassExceptionTypeAttributeValue() throws IOException, ServletException {
+        // mock a request that accepts a json response
+        MockSlingHttpServletRequest req = new MockErrorSlingHttpServletRequest("application/json,*/*;q=0.9") {
+
+            @Override
+            public Object getAttribute(String name) {
+                if (SlingConstants.ERROR_EXCEPTION_TYPE.equals(name)) {
+                    return Exception.class;
+                }
+                return super.getAttribute(name);
+            }
+
+        };
+        assertJsonErrorResponse(req);
     }
 
     @Test
@@ -172,7 +196,7 @@
     /**
      * Mock impl to simulate an error request
      */
-    private static final class MockErrorSlingHttpServletRequest extends MockSlingHttpServletRequest {
+    private static class MockErrorSlingHttpServletRequest extends MockSlingHttpServletRequest {
         private String accept;
 
         private MockErrorSlingHttpServletRequest(String accept) {
