Search in sources :

Example 1 with CmcResult

use of org.knowm.xchange.coinmarketcap.pro.v1.dto.CmcResult in project XChange by knowm.

the class CmcErrorAdapter method adapt.

/**
 * Parse errors from HTTP exceptions
 */
public static void adapt(HttpStatusIOException httpStatusException) {
    String msg = "HTTP Status: " + httpStatusException.getHttpStatusCode();
    // if we have a HTTP body try to parse more error details from body
    if (isNotEmpty(httpStatusException.getHttpBody())) {
        ObjectMapper mapper = new ObjectMapper();
        CmcResult result;
        try {
            result = mapper.readValue(httpStatusException.getHttpBody(), CmcResult.class);
        } catch (Exception e) {
            // but ignore errors on parsing and throw generic ExchangeException instead
            throw new ExchangeException(msg, httpStatusException);
        }
        // but if it contains a parsable result, then try to parse errors from result:
        if (result.getStatus() != null && isNotEmpty(result.getStatus().getErrorMessage()) && !result.isSuccess()) {
            String error = result.getStatus().getErrorMessage();
            if (result.getStatus().getErrorCode() == 401) {
                throw new ExchangeSecurityException(error);
            }
            if (result.getStatus().getErrorCode() == 402) {
                throw new FundsExceededException(error);
            }
            if (result.getStatus().getErrorCode() == 429) {
                throw new FrequencyLimitExceededException(error);
            }
            msg = error + " - ErrorCode: " + result.getStatus().getErrorCode();
            throw new ExchangeException(msg);
        }
    }
    // else: just throw ExchangeException with causing Exception
    throw new ExchangeException(msg, httpStatusException);
}
Also used : CmcResult(org.knowm.xchange.coinmarketcap.pro.v1.dto.CmcResult) ExchangeException(org.knowm.xchange.exceptions.ExchangeException) FrequencyLimitExceededException(org.knowm.xchange.exceptions.FrequencyLimitExceededException) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) FundsExceededException(org.knowm.xchange.exceptions.FundsExceededException) FrequencyLimitExceededException(org.knowm.xchange.exceptions.FrequencyLimitExceededException) ExchangeSecurityException(org.knowm.xchange.exceptions.ExchangeSecurityException) ExchangeException(org.knowm.xchange.exceptions.ExchangeException) HttpStatusIOException(si.mazi.rescu.HttpStatusIOException) ExchangeSecurityException(org.knowm.xchange.exceptions.ExchangeSecurityException) FundsExceededException(org.knowm.xchange.exceptions.FundsExceededException)

Aggregations

ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 CmcResult (org.knowm.xchange.coinmarketcap.pro.v1.dto.CmcResult)1 ExchangeException (org.knowm.xchange.exceptions.ExchangeException)1 ExchangeSecurityException (org.knowm.xchange.exceptions.ExchangeSecurityException)1 FrequencyLimitExceededException (org.knowm.xchange.exceptions.FrequencyLimitExceededException)1 FundsExceededException (org.knowm.xchange.exceptions.FundsExceededException)1 HttpStatusIOException (si.mazi.rescu.HttpStatusIOException)1