diff --git a/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthFeignBuilder.java b/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthFeignBuilder.java index 6e2c72485..2a88e9cfc 100644 --- a/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthFeignBuilder.java +++ b/spring-cloud-sleuth-instrumentation/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthFeignBuilder.java @@ -20,7 +20,6 @@ import feign.Client; import feign.Feign; import feign.Retryer; -import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; /** @@ -36,15 +35,19 @@ public final class SleuthFeignBuilder { } public static Feign.Builder builder(BeanFactory beanFactory) { - return Feign.builder().retryer(Retryer.NEVER_RETRY).client(client(beanFactory)); + return builder(beanFactory, null); } - private static Client client(BeanFactory beanFactory) { - try { + public static Feign.Builder builder(BeanFactory beanFactory, Client delegate) { + return Feign.builder().retryer(Retryer.NEVER_RETRY).client(client(beanFactory, delegate)); + } + + private static Client client(BeanFactory beanFactory, Client delegate) { + if (delegate == null) { return new LazyClient(beanFactory); } - catch (BeansException ex) { - return new LazyClient(beanFactory, new Client.Default(null, null)); + else { + return new LazyClient(beanFactory, delegate); } } diff --git a/spring-cloud-sleuth-instrumentation/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthFeignBuilderTests.java b/spring-cloud-sleuth-instrumentation/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthFeignBuilderTests.java new file mode 100644 index 000000000..92ccf81d7 --- /dev/null +++ b/spring-cloud-sleuth-instrumentation/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/feign/SleuthFeignBuilderTests.java @@ -0,0 +1,51 @@ +/* + * Copyright 2013-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.sleuth.instrument.web.client.feign; + +import feign.Client; +import feign.Feign; +import org.assertj.core.api.BDDAssertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import org.springframework.beans.factory.BeanFactory; + +import static org.mockito.Mockito.mock; + +/** + * @author Julien Baillagou + */ +@ExtendWith(MockitoExtension.class) +public class SleuthFeignBuilderTests { + + @Mock + BeanFactory beanFactory; + + @Test + public void should_generate_feign_builder() { + BDDAssertions.then(SleuthFeignBuilder.builder(beanFactory)).isExactlyInstanceOf(Feign.Builder.class); + } + + @Test + public void should_generate_feign_builder_with_given_delegate() { + BDDAssertions.then(SleuthFeignBuilder.builder(beanFactory, mock(Client.class))) + .isExactlyInstanceOf(Feign.Builder.class); + } + +}