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

pl.wrzasq.commons.client.FeignClientFactory Maven / Gradle / Ivy

There is a newer version: 2.0.10
Show newest version
/*
 * This file is part of the pl.wrzasq.commons.
 *
 * @license http://mit-license.org/ The MIT license
 * @copyright 2017, 2019 © by Rafał Wrzeszcz - Wrzasq.pl.
 */

package pl.wrzasq.commons.client;

import java.util.Collection;
import java.util.Collections;
import java.util.function.Consumer;
import java.util.function.Supplier;

import feign.Feign;

/**
 * Generic factory for REST services clients.
 */
public class FeignClientFactory {
    /**
     * Collection of all custom client modifiers.
     */
    private Collection> configurators;

    /**
     * Source for Feign builder.
     */
    private Supplier feignBuilderSource;

    /**
     * Collection of all custom client modifiers.
     *
     * @param configurators Feign builder configurators.
     * @param feignBuilderSource Feign builder producer.
     */
    public FeignClientFactory(
        Collection> configurators,
        Supplier feignBuilderSource
    ) {
        this.configurators = configurators;
        this.feignBuilderSource = feignBuilderSource;
    }

    /**
     * Creates Feign client of given type.
     *
     * @param clientType Client type class.
     * @param url Client URL.
     * @param configurators Custom configuration callbacks.
     * @param  Type of client.
     * @return Client instance.
     */
    public  ClientType createClient(
        Class clientType,
        String url,
        Collection> configurators
    ) {
        Feign.Builder builder = this.feignBuilderSource.get();

        // pre-defined configurators
        this.configurators.forEach((Consumer configurator) -> configurator.accept(builder));
        // custom configurators
        configurators.forEach((Consumer configurator) -> configurator.accept(builder));

        return builder.target(clientType, url);
    }

    /**
     * Default creator for Feign client.
     *
     * @param clientType Client type class.
     * @param url Client URL.
     * @param  Type of client.
     * @return Client instance.
     */
    public  ClientType createClient(
        Class clientType,
        String url
    ) {
        return this.createClient(clientType, url, Collections.emptyList());
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy