This is an automated email from the ASF dual-hosted git repository.
enorman pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-resolver.git
The following commit(s) were added to refs/heads/master by this push:
new fc1d22f SLING-10615 DefaultErrorHandlerServlet may throw a
ClassCastException (#18)
fc1d22f is described below
commit fc1d22f79c31aa2e6eb91ef12b21c4af386242de
Author: Eric Norman <[email protected]>
AuthorDate: Sat Jul 17 15:19:26 2021 -0700
SLING-10615 DefaultErrorHandlerServlet may throw a ClassCastException (#18)
Handle ERROR_EXCEPTION_TYPE attribute value that is either a String or
Class object
---
.../defaults/DefaultErrorHandlerServlet.java | 10 ++++++-
.../defaults/DefaultErrorHandlerServletTest.java | 34 ++++++++++++++++++----
2 files changed, 38 insertions(+), 6 deletions(-)
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 @@ public class DefaultErrorHandlerServlet extends
GenericServlet {
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 @@ import org.junit.Test;
*/
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 @@ public class DefaultErrorHandlerServletTest {
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 @@ public class DefaultErrorHandlerServletTest {
/**
* 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) {