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

io.getstream.client.okhttp.repo.handlers.StreamExceptionHandler Maven / Gradle / Ivy

package io.getstream.client.okhttp.repo.handlers;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.squareup.okhttp.Response;
import io.getstream.client.exception.AuthenticationFailedException;
import io.getstream.client.exception.InternalServerException;
import io.getstream.client.exception.InvalidOrMissingInputException;
import io.getstream.client.exception.ResourceNotFoundException;
import io.getstream.client.exception.StreamClientException;
import io.getstream.client.model.beans.StreamErrorResponse;

import java.io.IOException;

/**
 * It provides a mechanism to translate the http status code (different from 200)
 * in a proper java Exception.
 */
public class StreamExceptionHandler {

    private final ObjectMapper objectMapper;

    /**
     * Create the object using the ObjectMapper to deserialize the json response coming from
     * remote side.
     *
     * @param objectMapper Jackson's objectMapper
     */
    public StreamExceptionHandler(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }

    /**
     * Translate http status code to Java Exception.
     *
     * @param response HTTP Response
     * @throws IOException in case of network/socket exceptions.
     * @throws StreamClientException in case of functional or server-side exception
     */
    public void handleResponseCode(final Response response) throws IOException, StreamClientException {
        switch (response.code()) {
            case 400:
                throw buildException(new InvalidOrMissingInputException(), response);
            case 401:
                throw buildException(new AuthenticationFailedException(), response);
            case 403:
                throw buildException(new AuthenticationFailedException(), response);
            case 404:
                throw buildException(new ResourceNotFoundException(), response);
            case 500:
                throw buildException(new InternalServerException(), response);
        }
    }

    private StreamClientException buildException(StreamClientException exception,
                                                 Response response) throws IOException {
        StreamErrorResponse error = objectMapper.readValue(response.body().byteStream(), StreamErrorResponse.class);
        exception.setCode(error.getCode());
        exception.setHttpStatusCode(error.getStatusCode());
        exception.setDetail(error.getDetail());
        exception.setExceptionField(error.getException());
        return exception;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy