package com.mongodb.hvdf; import java.util.LinkedHashMap; import java.util.Map; 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 com.mongodb.hvdf.api.ServiceException; import com.mongodb.hvdf.api.ServiceException.ErrorCode; @Provider public class ServiceExceptionMapper implements ExceptionMapper<ServiceException> { private static final Status DEFAULT_RESPONSE_CODE = Status.INTERNAL_SERVER_ERROR; private static final String ERROR_TYPE_KEY = "_errorType"; private static final String ERROR_NUMBER_KEY = "_errorNum"; @Override public Response toResponse(ServiceException svcex) { Status responseStatus = DEFAULT_RESPONSE_CODE ; // Build the response information Map<String, Object> errorProps = svcex.getPropertyMap(); ErrorCode svcError = svcex.getErrorCode(); Map<String, Object> responseProps = new LinkedHashMap<String, Object>(); if(svcError != null){ responseProps.put(ERROR_NUMBER_KEY, svcError.getErrorNumber()); responseProps.put(ERROR_TYPE_KEY, svcError.toString()); responseStatus = svcError.getResponseStatus(); } if(errorProps != null){ responseProps.putAll(errorProps); } return Response.status(responseStatus).entity(responseProps). type(MediaType.APPLICATION_JSON).build(); } }