Ich versuche, WebApplicationException
mit meiner javax.ws.rs.ext.ExceptionMapper
Klasse zu fangen, aber ich bekomme ein seltsames Verhalten.Wie fangen WebApplicationException mit JAX-RS
Diese Methode meine einfache Rest ist:
@GET
@Path("/saySomething")
public List<String> saySomething() {
String response = EchoRestClient.ping();
List<String> list = new ArrayList<>();
list.add(response);
list.add("okay");
return list;
}
(1.) Dies ist die Client-Klasse ist, die einen anderen Rest-API-Aufrufe:
public class EchoRestClient {
private static Client client = ClientBuilder.newClient();
public static String ping() {
String serviceUrl = PropertyReader.getProperty(ServiceUrl.ECHO_SERVICE);
Response response = client
.target(serviceUrl)
.path("saySomething")
.request(ExtendedMediaType.APPLICATION_UTF8)
.get();
if (response.getStatus() == Response.Status.OK.getStatusCode()) {
return response.getEntity(String.class);
}
throw new WebApplicationException(response);
}
}
Und Handler meine benutzerdefinierte Ausnahme, die die obige Ausnahme NICHT abfängt:
@Provider
public class WebservletExceptionMapper implements ExceptionMapper<Exception> {
@Override
public Response toResponse(Exception exception) {
System.out.println("caught exception");
Response response;
if (exception instanceof WebApplicationException) {
response = ((WebApplicationException) exception).getResponse();
} else {
response = Response....build();
}
return response;
}
}
(2), aber wenn ich dies die Ausnahme tun gefangen (EchoRestClient.java):
public static String ping() {
// same code then before
WebApplicationException e = new WebApplicationException(response);
throw new RuntimeException("xxxxxx", e);
}
Mein Code oben funktioniert gut und ich bekomme eine richtige Antwort, wenn ich die Methode saySomething
Rest Anruf von meinem Webbrowser.
ABER, wenn ich die EchoService
Ruhe entfestire (enthält die aufgerufene ping
Rest-Methode) das HTTP 404 wird nicht im ersten Fall gefangen. Ich muss eine RuntimeException auslösen, weil WebApplicationException nicht abgefangen wird (2. Fall).
Gemäß der Dokumentation ist die Ausnahmehierarchie WebApplicationException extends RuntimeException.
Was ist hier falsch?
- EDIT -
Wenn ich werfe diese Ausnahme dann wird es gefangen fein: throw new WebApplicationException(response.getStatus())
Aber dies nicht funktioniert: throw new WebApplicationException(response)
Ist etwas nicht in Ordnung in dem Antwortobjekt ?
Leider hat es nicht geholfen. – zappee