package ru.hflabs.rcd.soap.mapper;
import ru.hflabs.rcd.model.notification.NotifyType;
import ru.hflabs.rcd.soap.model.WError;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
/**
* Класс <class>WExceptionMapper</class> реализует сервис трансформации ошибки в REST-full ответ
*
* @author Nazin Alexander
*/
@Provider
public class ThrowableMapper implements ExceptionMapper<Throwable> {
/**
* Формирует сообщение об ошибке
*
* @param notifyType тип ошибки
* @param cause причина ошибки
* @return Возвращает сообщение об ошибке
*/
public static WError createError(NotifyType notifyType, Throwable cause) {
WError errorMessage = new WError();
errorMessage.setErrorType(notifyType.name());
errorMessage.setErrorMessage(String.format("%s: %s", cause.getClass().getSimpleName(), cause.getMessage()));
return errorMessage;
}
@Override
public Response toResponse(Throwable exception) {
if (exception instanceof IllegalArgumentException) {
return Response.status(Response.Status.BAD_REQUEST)
.type(MediaType.APPLICATION_JSON)
.entity(createError(NotifyType.ERROR, exception))
.build();
} else {
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.type(MediaType.TEXT_PLAIN)
.entity(exception.getMessage())
.build();
}
}
}