/*
* Copyright (c) 2016 OBiBa. All rights reserved.
*
* This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.obiba.jersey.exceptionmapper;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.protobuf.GeneratedMessage;
import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
public abstract class AbstractErrorDtoExceptionMapper<TException extends Throwable>
implements ExceptionMapper<TException> {
protected final Logger log = LoggerFactory.getLogger(getClass());
protected abstract Response.Status getStatus();
protected abstract GeneratedMessage.ExtendableMessage<?> getErrorDto(TException exception);
@Override
public Response toResponse(TException exception) {
log.debug("{}", exception.getClass().getSimpleName(), exception);
GeneratedMessage.ExtendableMessage<?> errorDto = getErrorDto(exception);
log.debug("ErrorDto: {}", errorDto);
//TODO support also application/x-protobuf
return Response.status(getStatus()).type(APPLICATION_JSON).entity(errorDto).build();
}
}