Skip to content

Commit 4b8d6c3

Browse files
author
adriancole
committed
centralize logic that ensures response body is closed
1 parent 7071374 commit 4b8d6c3

5 files changed

Lines changed: 20 additions & 22 deletions

File tree

feign-core/src/main/java/feign/MethodHandler.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import static feign.FeignException.errorExecuting;
2929
import static feign.FeignException.errorReading;
3030
import static feign.Util.checkNotNull;
31+
import static feign.Util.ensureClosed;
3132

3233
final class MethodHandler {
3334

@@ -114,22 +115,13 @@ public Object executeAndDecode(String configKey, RequestTemplate template, Type
114115
throw errorDecoder.decode(configKey, response);
115116
}
116117
} catch (Throwable e) {
117-
ensureBodyClosed(response);
118+
ensureClosed(response.body());
118119
if (IOException.class.isInstance(e))
119120
throw errorReading(request, response, IOException.class.cast(e));
120121
throw e;
121122
}
122123
}
123124

124-
private void ensureBodyClosed(Response response) {
125-
if (response.body() != null) {
126-
try {
127-
response.body().close();
128-
} catch (IOException ignored) { // NOPMD
129-
}
130-
}
131-
}
132-
133125
private Response execute(Request request) {
134126
try {
135127
return client.execute(request, options);

feign-core/src/main/java/feign/Util.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package feign;
1717

18+
import java.io.IOException;
1819
import java.lang.reflect.Array;
1920
import java.nio.charset.Charset;
2021
import java.util.ArrayList;
@@ -114,4 +115,13 @@ public static <T> T[] toArray(Iterable<? extends T> iterable, Class<T> type) {
114115
public static <T> Collection<T> valuesOrEmpty(Map<String, Collection<T>> map, String key) {
115116
return map.containsKey(key) ? map.get(key) : Collections.<T>emptyList();
116117
}
118+
119+
public static void ensureClosed(Response.Body body) {
120+
if (body != null) {
121+
try {
122+
body.close();
123+
} catch (IOException ignored) { // NOPMD
124+
}
125+
}
126+
}
117127
}

feign-core/src/main/java/feign/Wire.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.logging.Logger;
2626
import java.util.logging.SimpleFormatter;
2727

28+
import static feign.Util.ensureClosed;
2829
import static feign.Util.valuesOrEmpty;
2930

3031
/* Writes http headers and body. Plumb to your favorite log impl. */
@@ -138,10 +139,7 @@ Response wireAndRebufferResponse(Target<?> target, Response response) throws IOE
138139
}
139140
return Response.create(response.status(), response.reason(), response.headers(), buffered.toString());
140141
} finally {
141-
try {
142-
body.close();
143-
} catch (IOException suppressed) { // NOPMD
144-
}
142+
ensureClosed(response.body());
145143
}
146144
}
147145
return response;

feign-core/src/main/java/feign/codec/Decoder.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
import feign.Response;
2323

24+
import static feign.Util.ensureClosed;
25+
2426
/**
2527
* Decodes an HTTP response into a given type. Invoked when
2628
* {@link Response#status()} is in the 2xx range.
@@ -73,10 +75,7 @@ public Object decode(String methodKey, Response response, Type type) throws Thro
7375
try {
7476
return decode(methodKey, reader, type);
7577
} finally {
76-
try {
77-
reader.close();
78-
} catch (IOException suppressed) { // NOPMD
79-
}
78+
ensureClosed(body);
8079
}
8180
}
8281

feign-core/src/main/java/feign/codec/ToStringDecoder.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
import feign.Response;
2424

25+
import static feign.Util.ensureClosed;
26+
2527
/**
2628
* Adapted from {@code com.google.common.io.CharStreams.toString()}.
2729
*/
@@ -38,10 +40,7 @@ public Object decode(String methodKey, Response response, Type type) throws IOEx
3840
try {
3941
return decode(methodKey, reader, type);
4042
} finally {
41-
try {
42-
reader.close();
43-
} catch (IOException suppressed) { // NOPMD
44-
}
43+
ensureClosed(body);
4544
}
4645
}
4746

0 commit comments

Comments
 (0)