diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TraceFeignAspect.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TraceFeignAspect.java index ba1044917..5f3467a02 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TraceFeignAspect.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TraceFeignAspect.java @@ -53,6 +53,8 @@ class TraceFeignAspect { log.debug("Executing feign client via TraceFeignAspect"); } if (bean != wrappedBean) { + // NOTE: in master(3813cf9dd47f98db0e075412abbffbd9d6742974), + // this is executeTraceFeignClient(wrappedBean, pjp) return executeTraceFeignClient(bean, pjp); } return pjp.proceed(); 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 a5c3c15f1..11a54e745 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 @@ -1,5 +1,5 @@ /* - * Copyright 2013-2019 the original author or authors. + * Copyright 2013-2020 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. @@ -29,6 +29,7 @@ import org.springframework.cloud.netflix.ribbon.SpringClientFactory; import org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient; import org.springframework.cloud.openfeign.ribbon.CachingSpringLoadBalancerFactory; import org.springframework.cloud.openfeign.ribbon.LoadBalancerFeignClient; +import org.springframework.cloud.util.ProxyUtils; import org.springframework.util.ClassUtils; /** @@ -100,7 +101,7 @@ final class TraceFeignObjectWrapper { private Object instrumentedFeignLoadBalancerClient(Object bean) { if (AopUtils.getTargetClass(bean).equals(FeignBlockingLoadBalancerClient.class)) { - FeignBlockingLoadBalancerClient client = ((FeignBlockingLoadBalancerClient) bean); + FeignBlockingLoadBalancerClient client = ProxyUtils.getTargetObject(bean); return new TraceFeignBlockingLoadBalancerClient( (Client) new TraceFeignObjectWrapper(this.beanFactory) .wrap(client.getDelegate()), diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClient.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClient.java index a551829fb..ac6d69442 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClient.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/feign/TracingFeignClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2013-2019 the original author or authors. + * Copyright 2013-2020 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. @@ -37,6 +37,7 @@ import feign.Response; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.cloud.util.ProxyUtils; import org.springframework.lang.Nullable; /** @@ -58,7 +59,9 @@ final class TracingFeignClient implements Client { TracingFeignClient(HttpTracing httpTracing, Client delegate) { this.currentTraceContext = httpTracing.tracing().currentTraceContext(); this.handler = HttpClientHandler.create(httpTracing); - this.delegate = delegate; + Client delegateTarget = ProxyUtils.getTargetObject(delegate); + this.delegate = delegateTarget instanceof TracingFeignClient + ? ((TracingFeignClient) delegateTarget).delegate : delegateTarget; } static Client create(HttpTracing httpTracing, Client delegate) {