From 511a50faf1a6fac1537b5caeebc62e8ccf25fc0f Mon Sep 17 00:00:00 2001 From: seanyu Date: Tue, 21 Mar 2023 16:56:00 +0800 Subject: [PATCH] use ReflectionUtils to get decoder in feign 10.12 --- .../circuitbreaker/feign/PolarisFeignCircuitBreaker.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignCircuitBreaker.java b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignCircuitBreaker.java index daf3776e8..859a1e10b 100644 --- a/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignCircuitBreaker.java +++ b/spring-cloud-starter-tencent-polaris-circuitbreaker/src/main/java/com/tencent/cloud/polaris/circuitbreaker/feign/PolarisFeignCircuitBreaker.java @@ -17,12 +17,16 @@ package com.tencent.cloud.polaris.circuitbreaker.feign; +import java.lang.reflect.Field; + import feign.Feign; import feign.Target; +import feign.codec.Decoder; import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory; import org.springframework.cloud.openfeign.CircuitBreakerNameResolver; import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.util.ReflectionUtils; /** * PolarisFeignCircuitBreaker, mostly copy from FeignCircuitBreaker, but giving Polaris modification. @@ -85,8 +89,11 @@ public final class PolarisFeignCircuitBreaker { } public Feign build(final FallbackFactory nullableFallbackFactory) { + Field field = ReflectionUtils.findField(Feign.Builder.class, "decoder"); + field.setAccessible(true); + Decoder decoder = (Decoder) ReflectionUtils.getField(field, this); this.invocationHandlerFactory((target, dispatch) -> new PolarisFeignCircuitBreakerInvocationHandler( - circuitBreakerFactory, feignClientName, target, dispatch, nullableFallbackFactory, circuitBreakerNameResolver, this.decoder)); + circuitBreakerFactory, feignClientName, target, dispatch, nullableFallbackFactory, circuitBreakerNameResolver, decoder)); return this.build(); }