If an internal error occurs in Jersey, you will get a response with an error message at status 500, right? However, sometimes the trouble was
500 may be returned with the behavior like this, and it may be difficult to deal with it (I myself was also troubled).
As a countermeasure in such a case, I will introduce a method to pick up the exception that occurred in Jersey and send the information to the log.
Set up an event listener to output information on exceptions that occurred during request / response processing to the log.
Specifically, prepare the following MyApplicationEventListener
and MyRequestEventListener
, and register MyApplicationEventListener
of them in the application.
import org.glassfish.jersey.server.monitoring.ApplicationEvent;
import org.glassfish.jersey.server.monitoring.ApplicationEventListener;
import org.glassfish.jersey.server.monitoring.RequestEvent;
import org.glassfish.jersey.server.monitoring.RequestEventListener;
public class MyApplicationEventListener implements ApplicationEventListener {
@Override
public void onEvent(ApplicationEvent event) {
}
@Override
public RequestEventListener onRequest(RequestEvent event) {
return new MyRequestEventListener();
}
}
import java.util.logging.Logger;
import org.glassfish.jersey.server.monitoring.RequestEvent;
import org.glassfish.jersey.server.monitoring.RequestEventListener;
public class MyRequestEventListener implements RequestEventListener {
private static final Logger LOGGER = Logger.getLogger(MyRequestEventListener.class.getName());
@Override
public void onEvent(RequestEvent event) {
switch (event.getType()) {
case ON_EXCEPTION:
LOGGER.severe(event.getException().toString());
}
}
}
This should log the exception information and stack trace that occurred.