All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.aol.micro.server.general.exception.mapper.GeneralExceptionMapper Maven / Gradle / Ivy

There is a newer version: 0.91.11
Show newest version
package com.aol.micro.server.general.exception.mapper;


import static org.jooq.lambda.tuple.Tuple.tuple;

import java.util.Map;
import java.util.Optional;
import java.util.UUID;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import org.jooq.lambda.tuple.Tuple;
import org.jooq.lambda.tuple.Tuple2;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Provider
public class GeneralExceptionMapper implements ExceptionMapper {

	final Logger logger;
	
	 GeneralExceptionMapper(Logger logger){
		 this.logger = logger;
	 }
	 
	 public GeneralExceptionMapper(){
		 this.logger  = LoggerFactory.getLogger(GeneralExceptionMapper.class);;
	 }

	
	Map, Tuple2> mapOfExceptionsToErrorCodes = MapOfExceptionsToErrorCodes.getMergedMappings();

	private Optional> find(Class c) {
		for (Map.Entry, Tuple2> entry : this.mapOfExceptionsToErrorCodes.entrySet()) {
			if (entry.getKey().isAssignableFrom(c)) {
				return Optional.ofNullable(entry.getValue());
			}
		}
		return Optional.empty();
	}

	@Override
	public Response toResponse(final Exception ex) {

		final String errorTrackingId = UUID.randomUUID().toString();

		Tuple2 error = new Tuple2(MapOfExceptionsToErrorCodes.INTERNAL_SERVER_ERROR, Status.INTERNAL_SERVER_ERROR);

		Optional> errorFromLookup = find(ex.getClass());

		if (errorFromLookup.isPresent()) {
			error = errorFromLookup.get();

		} else {
			if(ex instanceof javax.ws.rs.WebApplicationException){
				javax.ws.rs.WebApplicationException rsEx = ((javax.ws.rs.WebApplicationException)ex);
				error = tuple(rsEx.getResponse().getStatusInfo().getReasonPhrase(),Status.fromStatusCode(rsEx.getResponse().getStatus()));
				
			}
			logger.error( String.format("%s Error id: %s", error.v1(), errorTrackingId) + ex.getMessage(), ex);
		}
		logger.warn( String.format("%s Error id: %s", error.v1(), errorTrackingId));

		return Response.status(error.v2())
				.entity(new ExceptionWrapper(error.v1(), String.format("Error id: %s %s", errorTrackingId, ex.getMessage())))
				.type(MediaType.APPLICATION_JSON_TYPE).build();
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy