Browse Source

Removing close call from exception

pull/339/merge
Ryan Baxter 7 years ago
parent
commit
9368489182
  1. 12
      spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/ClientHttpResponseStatusCodeException.java
  2. 5
      spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/RetryLoadBalancerInterceptor.java
  3. 4
      spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/ClientHttpResponseStatusCodeExceptionTest.java

12
spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/ClientHttpResponseStatusCodeException.java

@ -21,7 +21,6 @@ import java.io.InputStream; @@ -21,7 +21,6 @@ import java.io.InputStream;
import org.springframework.http.HttpHeaders;
import org.springframework.http.client.AbstractClientHttpResponse;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.util.StreamUtils;
/**
* {@link RetryableStatusCodeException} that captures a {@link ClientHttpResponse}
@ -35,12 +34,11 @@ public class ClientHttpResponseStatusCodeException extends RetryableStatusCodeEx @@ -35,12 +34,11 @@ public class ClientHttpResponseStatusCodeException extends RetryableStatusCodeEx
* Constructor
* @param serviceId The service id
* @param response The response object
* @throws IOException Thrown if the {@link ClientHttpResponse} body cannot be retrieved
* @throws IOException Thrown if the {@link ClientHttpResponse} response code cant be retrieved
*/
public ClientHttpResponseStatusCodeException(String serviceId, ClientHttpResponse response) throws IOException {
public ClientHttpResponseStatusCodeException(String serviceId, ClientHttpResponse response, byte[] body) throws IOException {
super(serviceId, response.getRawStatusCode(), response, null);
this.response = new ClientHttpResponseWrapper(response);
response.close();
this.response = new ClientHttpResponseWrapper(response, body);
}
@Override
@ -53,9 +51,9 @@ public class ClientHttpResponseStatusCodeException extends RetryableStatusCodeEx @@ -53,9 +51,9 @@ public class ClientHttpResponseStatusCodeException extends RetryableStatusCodeEx
private ClientHttpResponse response;
private byte[] body;
public ClientHttpResponseWrapper(ClientHttpResponse response) throws IOException {
public ClientHttpResponseWrapper(ClientHttpResponse response, byte[] body) {
this.response = response;
this.body = StreamUtils.copyToByteArray(response.getBody());
this.body = body;
}
@Override

5
spring-cloud-commons/src/main/java/org/springframework/cloud/client/loadbalancer/RetryLoadBalancerInterceptor.java

@ -32,6 +32,7 @@ import org.springframework.retry.backoff.NoBackOffPolicy; @@ -32,6 +32,7 @@ import org.springframework.retry.backoff.NoBackOffPolicy;
import org.springframework.retry.policy.NeverRetryPolicy;
import org.springframework.retry.support.RetryTemplate;
import org.springframework.util.Assert;
import org.springframework.util.StreamUtils;
/**
* @author Ryan Baxter
@ -131,7 +132,9 @@ public class RetryLoadBalancerInterceptor implements ClientHttpRequestIntercepto @@ -131,7 +132,9 @@ public class RetryLoadBalancerInterceptor implements ClientHttpRequestIntercepto
requestFactory.createRequest(request, body, execution));
int statusCode = response.getRawStatusCode();
if (retryPolicy != null && retryPolicy.retryableStatusCode(statusCode)) {
throw new ClientHttpResponseStatusCodeException(serviceName, response);
byte[] body = StreamUtils.copyToByteArray(response.getBody());
response.close();
throw new ClientHttpResponseStatusCodeException(serviceName, response, body);
}
return response;
}

4
spring-cloud-commons/src/test/java/org/springframework/cloud/client/loadbalancer/ClientHttpResponseStatusCodeExceptionTest.java

@ -25,8 +25,8 @@ public class ClientHttpResponseStatusCodeExceptionTest { @@ -25,8 +25,8 @@ public class ClientHttpResponseStatusCodeExceptionTest {
public void testCreation() throws Exception {
MyClientHttpResponse response = new MyClientHttpResponse();
assertFalse(response.isClosed());
ClientHttpResponseStatusCodeException exp = new ClientHttpResponseStatusCodeException("service", response);
assertTrue(response.isClosed());
ClientHttpResponseStatusCodeException exp = new ClientHttpResponseStatusCodeException("service",
response, response.getStatusText().getBytes());
ClientHttpResponse expResponse = exp.getResponse();
assertEquals(response.getRawStatusCode(), expResponse.getRawStatusCode());
assertEquals(response.getStatusText(), expResponse.getStatusText());

Loading…
Cancel
Save