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;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.client.AbstractClientHttpResponse; import org.springframework.http.client.AbstractClientHttpResponse;
import org.springframework.http.client.ClientHttpResponse; import org.springframework.http.client.ClientHttpResponse;
import org.springframework.util.StreamUtils;
/** /**
* {@link RetryableStatusCodeException} that captures a {@link ClientHttpResponse} * {@link RetryableStatusCodeException} that captures a {@link ClientHttpResponse}
@ -35,12 +34,11 @@ public class ClientHttpResponseStatusCodeException extends RetryableStatusCodeEx
* Constructor * Constructor
* @param serviceId The service id * @param serviceId The service id
* @param response The response object * @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); super(serviceId, response.getRawStatusCode(), response, null);
this.response = new ClientHttpResponseWrapper(response); this.response = new ClientHttpResponseWrapper(response, body);
response.close();
} }
@Override @Override
@ -53,9 +51,9 @@ public class ClientHttpResponseStatusCodeException extends RetryableStatusCodeEx
private ClientHttpResponse response; private ClientHttpResponse response;
private byte[] body; private byte[] body;
public ClientHttpResponseWrapper(ClientHttpResponse response) throws IOException { public ClientHttpResponseWrapper(ClientHttpResponse response, byte[] body) {
this.response = response; this.response = response;
this.body = StreamUtils.copyToByteArray(response.getBody()); this.body = body;
} }
@Override @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;
import org.springframework.retry.policy.NeverRetryPolicy; import org.springframework.retry.policy.NeverRetryPolicy;
import org.springframework.retry.support.RetryTemplate; import org.springframework.retry.support.RetryTemplate;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StreamUtils;
/** /**
* @author Ryan Baxter * @author Ryan Baxter
@ -131,7 +132,9 @@ public class RetryLoadBalancerInterceptor implements ClientHttpRequestIntercepto
requestFactory.createRequest(request, body, execution)); requestFactory.createRequest(request, body, execution));
int statusCode = response.getRawStatusCode(); int statusCode = response.getRawStatusCode();
if (retryPolicy != null && retryPolicy.retryableStatusCode(statusCode)) { 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; return response;
} }

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

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

Loading…
Cancel
Save