This is an automated email from the ASF dual-hosted git repository.
jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push:
new 5a82f33 Refactor BasicRestCallHandler.convertThrowable().
5a82f33 is described below
commit 5a82f33a9739f6465fd3924839666d8b016d4c05
Author: JamesBognar <[email protected]>
AuthorDate: Thu Jan 16 13:27:34 2020 -0500
Refactor BasicRestCallHandler.convertThrowable().
---
.../apache/juneau/rest/exceptions/BasicTest.java | 20 +++++++++++++++++++
.../apache/juneau/rest/BasicRestCallHandler.java | 23 ++++++++++++++++++++--
.../org/apache/juneau/rest/RestMethodContext.java | 5 +----
3 files changed, 42 insertions(+), 6 deletions(-)
diff --git
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/exceptions/BasicTest.java
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/exceptions/BasicTest.java
index 17c2804..d5a8a53 100644
---
a/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/exceptions/BasicTest.java
+++
b/juneau-rest/juneau-rest-server-utest/src/test/java/org/apache/juneau/rest/exceptions/BasicTest.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.rest.testutils.TestUtils.*;
import org.apache.juneau.dto.swagger.*;
import org.apache.juneau.json.*;
+import org.apache.juneau.parser.*;
import org.apache.juneau.rest.annotation.*;
import org.apache.juneau.rest.helper.*;
import org.apache.juneau.rest.mock2.*;
@@ -975,4 +976,23 @@ public class BasicTest {
public void g01_thrownObjectDoesntMatchReturnType() throws Exception {
g.get("/thrownObjectDoesntMatchReturnType").execute().assertStatus(404);
}
+
+
//-----------------------------------------------------------------------------------------------------------------
+ // ParseException should produce BadRequest
+
//-----------------------------------------------------------------------------------------------------------------
+
+ @Rest
+ public static class H {
+ @RestMethod
+ public void getFoo() throws Exception {
+ throw new ParseException("Test");
+ }
+ }
+
+ static MockRest h = MockRest.create(H.class).build();
+
+ @Test
+ public void h01_parseExceptionCausesBadRequest() throws Exception {
+ h.get("/foo").execute().assertStatus(400);
+ }
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
index 13ca6e0..78d952d 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
@@ -18,15 +18,18 @@ import static org.apache.juneau.internal.StringUtils.*;
import static org.apache.juneau.rest.Enablement.*;
import java.io.*;
+import java.lang.reflect.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
+import org.apache.juneau.*;
import org.apache.juneau.http.StreamResource;
import org.apache.juneau.http.annotation.*;
import org.apache.juneau.rest.RestContext.*;
import org.apache.juneau.http.exception.*;
+import org.apache.juneau.parser.*;
import org.apache.juneau.reflect.*;
import org.apache.juneau.rest.util.*;
@@ -263,16 +266,32 @@ public class BasicRestCallHandler implements
RestCallHandler {
@SuppressWarnings("deprecation")
@Override
public Throwable convertThrowable(Throwable t) {
+
ClassInfo ci = ClassInfo.ofc(t);
- if (ci.is(HttpRuntimeException.class))
+ if (ci.is(InvocationTargetException.class)) {
+ t = ((InvocationTargetException)t).getTargetException();
+ ci = ClassInfo.ofc(t);
+ }
+
+ if (ci.is(HttpRuntimeException.class)) {
t = ((HttpRuntimeException)t).getInner();
+ ci = ClassInfo.ofc(t);
+ }
+
if (ci.isChildOf(RestException.class) ||
ci.hasAnnotation(Response.class))
return t;
+
+ if (t instanceof ParseException || t instanceof
InvalidDataConversionException)
+ return new BadRequest(t);
+
String n = t.getClass().getName();
- if (n.contains("AccessDenied"))
+
+ if (n.contains("AccessDenied") || n.contains("Unauthorized"))
return new Unauthorized(t);
+
if (n.contains("Empty") || n.contains("NotFound"))
return new NotFound(t);
+
return t;
}
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
index 95c768f..5c8efcc 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestMethodContext.java
@@ -949,10 +949,7 @@ public class RestMethodContext extends BeanContext
implements Comparable<RestMet
mi.toString(), mi.getFullName()
);
} catch (InvocationTargetException e) {
- Throwable e2 = e.getTargetException(); // Get
the throwable thrown from the doX() method.
- if (e2 instanceof ParseException || e2 instanceof
InvalidDataConversionException)
- throw new BadRequest(e2);
- throw toHttpException(e, InternalServerError.class);
+ throw e.getTargetException();
}
return SC_OK;
}