1313 */
1414package feign .http2client ;
1515
16- import feign .*;
16+ import feign .Client ;
17+ import feign .Request ;
1718import feign .Request .Options ;
19+ import feign .Response ;
20+ import feign .Util ;
1821import java .io .ByteArrayInputStream ;
1922import java .io .IOException ;
2023import java .net .URI ;
2831import java .net .http .HttpRequest .Builder ;
2932import java .net .http .HttpResponse ;
3033import java .net .http .HttpResponse .BodyHandlers ;
34+ import java .time .Duration ;
3135import java .util .*;
3236import java .util .function .Function ;
3337import java .util .stream .Collectors ;
@@ -46,12 +50,13 @@ public Http2Client(HttpClient client) {
4650
4751 @ Override
4852 public Response execute (Request request , Options options ) throws IOException {
49- final HttpRequest httpRequest = newRequestBuilder (request ).build ();
53+ final HttpRequest httpRequest = newRequestBuilder (request , options ).build ();
5054
5155 HttpResponse <byte []> httpResponse ;
5256 try {
5357 httpResponse = client .send (httpRequest , BodyHandlers .ofByteArray ());
5458 } catch (final InterruptedException e ) {
59+ Thread .currentThread ().interrupt ();
5560 throw new IOException ("Invalid uri " + request .url (), e );
5661 }
5762
@@ -70,7 +75,7 @@ public Response execute(Request request, Options options) throws IOException {
7075 return response ;
7176 }
7277
73- private Builder newRequestBuilder (Request request ) throws IOException {
78+ private Builder newRequestBuilder (Request request , Options options ) throws IOException {
7479 URI uri ;
7580 try {
7681 uri = new URI (request .url ());
@@ -86,7 +91,11 @@ private Builder newRequestBuilder(Request request) throws IOException {
8691 body = BodyPublishers .ofByteArray (data );
8792 }
8893
89- final Builder requestBuilder = HttpRequest .newBuilder ().uri (uri ).version (Version .HTTP_2 );
94+ final Builder requestBuilder =
95+ HttpRequest .newBuilder ()
96+ .uri (uri )
97+ .timeout (Duration .ofMillis (options .readTimeoutMillis ()))
98+ .version (Version .HTTP_2 );
9099
91100 final Map <String , Collection <String >> headers = filterRestrictedHeaders (request .headers ());
92101 if (!headers .isEmpty ()) {
@@ -159,7 +168,6 @@ private String[] asString(Map<String, Collection<String>> headers) {
159168 entry .getValue ().stream ()
160169 .map (value -> Arrays .asList (entry .getKey (), value ))
161170 .flatMap (List ::stream ))
162- .collect (Collectors .toList ())
163- .toArray (new String [0 ]);
171+ .toArray (String []::new );
164172 }
165173}
0 commit comments