Wir arbeiteten an einer Jersey-Webanwendung mit einem Team, als das Projekt immer größer wurde. Wir entschieden uns daher, von Tomcat zu Grizzly zu wechseln, um Teile des Projekts auf verschiedenen Portnummern bereitzustellen . Was ich jetzt herausgefunden habe, dass die benutzerdefinierte Ausnahmebehandlung, die wir haben, nicht funktioniert, stattdessen bekomme ich immer die Grizzly-HTML-Seite.JAX-RS Exception Mapper funktioniert nicht im Grizzly-Container
Beispiel Ausnahme:
public class DataNotFoundException extends RuntimeException{
private static final long serialVersionUID = -1622261264080480479L;
public DataNotFoundException(String message) {
super(message);
System.out.println("exception constructor called"); //this prints
}
}
Mapper:
@Provider
public class DataNotFoundExceptionMapper implements ExceptionMapper<DataNotFoundException>{
public DataNotFoundExceptionMapper() {
System.out.println("mapper constructor called"); //doesnt print
}
@Override
public Response toResponse(DataNotFoundException ex) {
System.out.println("toResponse called"); //doesnt print
ErrorMessage errorMessage = new ErrorMessage(ex.getMessage(), 404, "No documentation yet.");
return Response.status(Status.NOT_FOUND)
.entity(errorMessage)
.build();
//ErrorMessage is a simple POJO with 2 string and 1 int field
}
}
Ich bin nicht sicher, wo das Problem Quelle ist, wenn ich brauchte mehr Informationen/Code zur Verfügung stellen kann. Was ist das Problem, was kann ich versuchen?
EDIT:
Main.class:
public class Main {
/**
* Main method.
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
...
List<ServerInfo> serverList = new ArrayList<ServerInfo>();
serverList.add(new ServerInfo(
"api",8450,
new ResourceConfig().registerClasses(
the.package.was.here.ApiResource.class)
));
for(ServerInfo server : serverList) {
server.start();
}
System.out.println("Press enter to exit...");
System.in.read();
for(ServerInfo server : serverList) {
server.stop();
}
}
}
EDIT2: basierend auf this Frage habe ich diese ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, "true"
Eigenschaft versucht, mit, die nur ein wenig geholfen. Ich bekomme immer noch die HTML-Grizzly-Seite, wenn die Ausnahme passiert, aber jetzt sehe ich meine Ausnahme (+ Stack-Trace) im Körper der Seite.
Der Mapper wird wahrscheinlich nicht registriert. Können Sie Ihre App-Konfiguration anzeigen? –
meinst du den Code, der die Server startet? Abhängigkeiten? –
Nur Server-Code, mindestens zeigt die ResourceConfig –