You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.3 KiB
Java
41 lines
1.3 KiB
Java
package org.gcube.spatial.data.sdi.engine.impl.faults;
|
|
|
|
import java.io.PrintWriter;
|
|
import java.io.StringWriter;
|
|
|
|
import javax.ws.rs.WebApplicationException;
|
|
import javax.ws.rs.core.MediaType;
|
|
import javax.ws.rs.core.Response;
|
|
import javax.ws.rs.ext.ExceptionMapper;
|
|
|
|
import org.gcube.spatial.data.sdi.model.faults.ErrorMessage;
|
|
|
|
|
|
public class GenericExceptionMapper implements ExceptionMapper<Throwable> {
|
|
|
|
@Override
|
|
public Response toResponse(Throwable ex) {
|
|
|
|
ErrorMessage errorMessage = new ErrorMessage();
|
|
setHttpStatus(ex, errorMessage);
|
|
errorMessage.setCode(500);
|
|
errorMessage.setMessage(ex.getMessage());
|
|
StringWriter errorStackTrace = new StringWriter();
|
|
ex.printStackTrace(new PrintWriter(errorStackTrace));
|
|
errorMessage.setDeveloperMessage(errorStackTrace.toString());
|
|
errorMessage.setLink("www.d4science.org");
|
|
|
|
return Response.status(errorMessage.getStatus())
|
|
.entity(errorMessage)
|
|
.type(MediaType.APPLICATION_JSON)
|
|
.build();
|
|
}
|
|
|
|
private void setHttpStatus(Throwable ex, ErrorMessage errorMessage) {
|
|
if(ex instanceof WebApplicationException ) {
|
|
errorMessage.setStatus(((WebApplicationException)ex).getResponse().getStatus());
|
|
} else {
|
|
errorMessage.setStatus(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode()); //defaults to internal server error 500
|
|
}
|
|
}
|
|
} |