From 573d933b3deea93ad682fa6e3896d101c50449da Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 29 Mar 2022 17:04:32 +0200 Subject: [PATCH] Adjust to changes in commons. --- .../FeignBlockingLoadBalancerClient.java | 3 ++- .../openfeign/loadbalancer/LoadBalancerUtils.java | 14 +++++++++----- .../RetryableFeignBlockingLoadBalancerClient.java | 5 +++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/FeignBlockingLoadBalancerClient.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/FeignBlockingLoadBalancerClient.java index e0fe6e1e..6bf5f57d 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/FeignBlockingLoadBalancerClient.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/FeignBlockingLoadBalancerClient.java @@ -110,8 +110,9 @@ public class FeignBlockingLoadBalancerClient implements Client { } String reconstructedUrl = loadBalancerClient.reconstructURI(instance, originalUri).toString(); Request newRequest = buildRequest(request, reconstructedUrl); + LoadBalancerProperties loadBalancerProperties = loadBalancerClientFactory.getProperties(serviceId); return executeWithLoadBalancerLifecycleProcessing(delegate, options, newRequest, lbRequest, lbResponse, - supportedLifecycleProcessors); + supportedLifecycleProcessors, loadBalancerProperties.isUseRawStatusCodeInResponseData()); } protected Request buildRequest(Request request, String reconstructedUrl) { diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/LoadBalancerUtils.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/LoadBalancerUtils.java index 829880f6..66d6c1ee 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/LoadBalancerUtils.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/LoadBalancerUtils.java @@ -50,14 +50,15 @@ final class LoadBalancerUtils { static Response executeWithLoadBalancerLifecycleProcessing(Client feignClient, Request.Options options, Request feignRequest, org.springframework.cloud.client.loadbalancer.Request lbRequest, org.springframework.cloud.client.loadbalancer.Response lbResponse, - Set supportedLifecycleProcessors, boolean loadBalanced) throws IOException { + Set supportedLifecycleProcessors, boolean loadBalanced, boolean useRawStatusCodes) + throws IOException { supportedLifecycleProcessors.forEach(lifecycle -> lifecycle.onStartRequest(lbRequest, lbResponse)); try { Response response = feignClient.execute(feignRequest, options); if (loadBalanced) { supportedLifecycleProcessors.forEach( lifecycle -> lifecycle.onComplete(new CompletionContext<>(CompletionContext.Status.SUCCESS, - lbRequest, lbResponse, buildResponseData(response)))); + lbRequest, lbResponse, buildResponseData(response, useRawStatusCodes)))); } return response; } @@ -70,9 +71,12 @@ final class LoadBalancerUtils { } } - static ResponseData buildResponseData(Response response) { + static ResponseData buildResponseData(Response response, boolean useRawStatusCodes) { HttpHeaders responseHeaders = new HttpHeaders(); response.headers().forEach((key, value) -> responseHeaders.put(key, new ArrayList<>(value))); + if (useRawStatusCodes) { + return new ResponseData(responseHeaders, null, buildRequestData(response.request()), response.status()); + } return new ResponseData(HttpStatus.resolve(response.status()), responseHeaders, null, buildRequestData(response.request())); } @@ -87,9 +91,9 @@ final class LoadBalancerUtils { static Response executeWithLoadBalancerLifecycleProcessing(Client feignClient, Request.Options options, Request feignRequest, org.springframework.cloud.client.loadbalancer.Request lbRequest, org.springframework.cloud.client.loadbalancer.Response lbResponse, - Set supportedLifecycleProcessors) throws IOException { + Set supportedLifecycleProcessors, boolean useRawStatusCodes) throws IOException { return executeWithLoadBalancerLifecycleProcessing(feignClient, options, feignRequest, lbRequest, lbResponse, - supportedLifecycleProcessors, true); + supportedLifecycleProcessors, true, useRawStatusCodes); } } diff --git a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClient.java b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClient.java index f9c3a7c5..c38a7532 100644 --- a/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClient.java +++ b/spring-cloud-openfeign-core/src/main/java/org/springframework/cloud/openfeign/loadbalancer/RetryableFeignBlockingLoadBalancerClient.java @@ -163,9 +163,10 @@ public class RetryableFeignBlockingLoadBalancerClient implements Client { } org.springframework.cloud.client.loadbalancer.Response lbResponse = new DefaultResponse( retrievedServiceInstance); + LoadBalancerProperties loadBalancerProperties = loadBalancerClientFactory.getProperties(serviceId); Response response = LoadBalancerUtils.executeWithLoadBalancerLifecycleProcessing(delegate, options, - feignRequest, lbRequest, lbResponse, supportedLifecycleProcessors, - retrievedServiceInstance != null); + feignRequest, lbRequest, lbResponse, supportedLifecycleProcessors, retrievedServiceInstance != null, + loadBalancerProperties.isUseRawStatusCodeInResponseData()); int responseStatus = response.status(); if (retryPolicy != null && retryPolicy.retryableStatusCode(responseStatus)) { if (LOG.isDebugEnabled()) {