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

com.tvd12.ezymq.common.util.EzyRpcExceptionTranslators Maven / Gradle / Ivy

The newest version!
package com.tvd12.ezymq.common.util;

import com.tvd12.ezyfox.exception.BadRequestException;
import com.tvd12.ezyfox.exception.InternalServerErrorException;
import com.tvd12.ezyfox.exception.NotFoundException;
import com.tvd12.ezymq.common.constant.EzyRpcErrorCodes;
import com.tvd12.ezymq.common.constant.EzyRpcHeaderKeys;
import com.tvd12.ezymq.common.constant.EzyRpcStatusCodes;

import java.util.HashMap;
import java.util.Map;

import static com.tvd12.ezyfox.io.EzyStrings.EMPTY_STRING;

public final class EzyRpcExceptionTranslators {

    private EzyRpcExceptionTranslators() {}

    public static String getExceptionMessage(Throwable exception) {
        String message = exception.getMessage();
        if (message == null) {
            message = exception.toString();
        }
        return message;
    }

    public static Map exceptionToResponseHeaders(Throwable e) {
        Map responseHeaders = new HashMap<>();
        if (e instanceof NotFoundException) {
            responseHeaders.put(EzyRpcHeaderKeys.STATUS, EzyRpcStatusCodes.NOT_FOUND);
        } else if (e instanceof BadRequestException) {
            BadRequestException badEx = (BadRequestException) e;
            responseHeaders.put(EzyRpcHeaderKeys.STATUS, EzyRpcStatusCodes.BAD_REQUEST);
            responseHeaders.put(EzyRpcHeaderKeys.ERROR_CODE, badEx.getCode());
        } else if (e instanceof IllegalArgumentException) {
            responseHeaders.put(EzyRpcHeaderKeys.STATUS, EzyRpcStatusCodes.BAD_REQUEST);
            responseHeaders.put(EzyRpcHeaderKeys.ERROR_CODE, EzyRpcErrorCodes.INVALID_ARGUMENT);
        } else if (e instanceof UnsupportedOperationException) {
            responseHeaders.put(EzyRpcHeaderKeys.STATUS, EzyRpcStatusCodes.BAD_REQUEST);
            responseHeaders.put(EzyRpcHeaderKeys.ERROR_CODE, EzyRpcErrorCodes.UNSUPPORTED_OPERATION);
        } else {
            responseHeaders.put(EzyRpcHeaderKeys.STATUS, EzyRpcStatusCodes.INTERNAL_SERVER_ERROR);
        }
        responseHeaders.put(EzyRpcHeaderKeys.MESSAGE, getExceptionMessage(e));
        return responseHeaders;
    }

    public static void responseHeadersToException(
        Map responseHeaders
    ) {
        if (responseHeaders == null) {
            return;
        }
        Integer status = (Integer) responseHeaders.get(EzyRpcHeaderKeys.STATUS);
        if (status == null) {
            return;
        }
        String message = responseHeaders.getOrDefault(
            EzyRpcHeaderKeys.MESSAGE,
            EMPTY_STRING
        ).toString();
        Integer code = (Integer) responseHeaders.get(EzyRpcHeaderKeys.ERROR_CODE);
        if (status.equals(EzyRpcStatusCodes.NOT_FOUND)) {
            throw new NotFoundException(message);
        }
        if (status.equals(EzyRpcStatusCodes.BAD_REQUEST)) {
            throw new BadRequestException(code, message);
        }
        if (status.equals(EzyRpcStatusCodes.INTERNAL_SERVER_ERROR)) {
            throw new InternalServerErrorException(message);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy