From 5ca9080dab76b46cf9ff2674d47e34b8940583f1 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 7 May 2018 21:09:33 +0200 Subject: [PATCH] Verifies if Ribbon is on the classpath; fixes gh-975 --- .../client/feign/TraceFeignObjectWrapper.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TraceFeignObjectWrapper.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TraceFeignObjectWrapper.java index d88459db6..e2ec8b96f 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TraceFeignObjectWrapper.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TraceFeignObjectWrapper.java @@ -21,6 +21,7 @@ import org.springframework.beans.factory.BeanFactory; import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory; import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient; import org.springframework.cloud.netflix.ribbon.SpringClientFactory; +import org.springframework.util.ClassUtils; /** * Class that wraps Feign related classes into their Trace representative @@ -33,7 +34,13 @@ final class TraceFeignObjectWrapper { private final BeanFactory beanFactory; private CachingSpringLoadBalancerFactory cachingSpringLoadBalancerFactory; - private SpringClientFactory springClientFactory; + private Object springClientFactory; + private static final boolean hasLoadBalancerFeignClientClass; + + static { + hasLoadBalancerFeignClientClass = + ClassUtils.isPresent("org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient", null); + } TraceFeignObjectWrapper(BeanFactory beanFactory) { this.beanFactory = beanFactory; @@ -41,13 +48,15 @@ final class TraceFeignObjectWrapper { Object wrap(Object bean) { if (bean instanceof Client && !(bean instanceof TracingFeignClient)) { - if (bean instanceof LoadBalancerFeignClient && !(bean instanceof TraceLoadBalancerFeignClient)) { + if (hasLoadBalancerFeignClientClass && + bean instanceof LoadBalancerFeignClient && !(bean instanceof TraceLoadBalancerFeignClient)) { LoadBalancerFeignClient client = ((LoadBalancerFeignClient) bean); return new TraceLoadBalancerFeignClient( (Client) new TraceFeignObjectWrapper(this.beanFactory) .wrap(client.getDelegate()), factory(), clientFactory(), this.beanFactory); - } else if (bean instanceof TraceLoadBalancerFeignClient) { + } else if (hasLoadBalancerFeignClientClass && + bean instanceof TraceLoadBalancerFeignClient) { return bean; } return new LazyTracingFeignClient(this.beanFactory, (Client) bean); @@ -68,7 +77,7 @@ final class TraceFeignObjectWrapper { this.springClientFactory = this.beanFactory .getBean(SpringClientFactory.class); } - return this.springClientFactory; + return (SpringClientFactory) this.springClientFactory; } }