package edu.harvard.iq.dataverse.api.errorhandlers;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.json.Json;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
/**
* Produces custom 500 messages for the API.
* @author michael
*/
@Provider
public class ArrayOutOfBoundsExceptionHandler implements ExceptionMapper<java.lang.ArrayIndexOutOfBoundsException>{
private static final Logger logger = Logger.getLogger(ServeletExceptionHandler.class.getName());
@Context
HttpServletRequest request;
@Override
public Response toResponse(java.lang.ArrayIndexOutOfBoundsException ex){
String incidentId = UUID.randomUUID().toString();
logger.log(Level.SEVERE, "API internal error " + incidentId +": ArrayOutOfBounds:" + ex.getMessage(), ex);
return Response.status(500)
.entity( Json.createObjectBuilder()
.add("status", "ERROR")
.add("code", 500)
.add("message", "Internal server error. More details available at the server logs.")
.add("incidentId", incidentId)
.build())
.type("application/json").build();
}
}