
pl.wrzasq.commons.client.FeignClientFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of commons-client Show documentation
Show all versions of commons-client Show documentation
Web services client building utilities.
/*
* 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 extends ClientType> 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 extends ClientType> clientType,
String url
) {
return this.createClient(clientType, url, Collections.emptyList());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy