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

org.vfdtech.implementations.ApiClient Maven / Gradle / Ivy

package org.vfdtech.implementations;

import lombok.extern.slf4j.Slf4j;
import okhttp3.ConnectionPool;
import okhttp3.Headers;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Protocol;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
import org.apache.commons.lang3.tuple.Pair;
import org.vfdtech.models.ResponseWrapper;

import java.util.Collections;
import java.util.Objects;
import java.util.concurrent.TimeUnit;


@Slf4j
public class ApiClient {
    private static OkHttpClient client;

    public ApiClient() {
        client = create();
    }

    public static OkHttpClient create() {
        ConnectionPool connectionPool =
                new ConnectionPool(10, 60, TimeUnit.MILLISECONDS);
        return new OkHttpClient.Builder().followRedirects(false)
                .protocols(Collections.singletonList(Protocol.HTTP_1_1))
                .retryOnConnectionFailure(true)
                .connectionPool(connectionPool)
                .build();
    }

    public static ResponseWrapper restExchange(String httpMethod, String url, Object... args) {
        if (client == null) {
            client = create();
        }
        Request request;

        if (args == null) {
            args = new Object[]{};
        }
        String requestBody = args.length > 0 ? (String) args[0] : "";
        Headers headers = args.length > 1 ? (Headers) args[1] : null;
        if (!requestBody.equalsIgnoreCase( "")) {
            log.info("::: REQUEST URL :::{}", url);
            log.info("::: REQUEST TO SEND :::{}", requestBody);
        }else{
            log.info("::: REQUEST URL :::{}", url);
        }
        switch (httpMethod) {
            case "POST":
                MediaType mediaType = args.length > 2 ? (MediaType) args[2] :
                        MediaType.get("application/json; charset=utf-8");
                RequestBody body = RequestBody.create(requestBody, mediaType);
                request = (headers != null) ? new Request.Builder()
                        .url(url)
                        .post(body)
                        .headers(headers)
                        .build() :
                        new Request.Builder()
                                .url(url)
                                .post(body)
                                .build();
                break;
            case "GET":
                request = headers != null ? new Request.Builder()
                        .url(url)
                        .headers(headers)
                        .get()
                        .build() : new Request.Builder()
                        .url(url)
                        .get()
                        .build();
                break;
            default:
                throw new IllegalStateException("Unexpected value: " + httpMethod);
        }


        try (Response response = client.newCall(Objects.requireNonNull(request)).execute()) {
            ResponseBody responseBody = response.body();
            String responseString = "";
            if (responseBody != null) {
                responseString = responseBody.string();
                log.info("::: RESPONSE FROM SERVICE:::{}", responseString);
            }

            return ResponseWrapper.builder()
                    .statusCode(response.code())
                    .responseEntity(Pair.of(response.message(), responseString))
                    .build();
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseWrapper.builder().statusCode(500)
                    .responseEntity(Pair.of(e.getMessage(), null)).build();
        }

    }

    public enum HttpMethod {
        POST, GET, PUT, DELETE
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy