| 65 | /* |
| 66 | */ |
| 67 | public final class ApacheHttp5Client implements Client { |
| 68 | private static final String ACCEPT_HEADER_NAME = "Accept"; |
| 69 | |
| 70 | private final HttpClient client; |
| 71 | |
| 72 | public ApacheHttp5Client() { |
| 73 | this(HttpClientBuilder.create().build()); |
| 74 | } |
| 75 | |
| 76 | public ApacheHttp5Client(HttpClient client) { |
| 77 | this.client = client; |
| 78 | } |
| 79 | |
| 80 | @Override |
| 81 | public Response execute(Request request, Request.Options options) throws IOException { |
| 82 | ClassicHttpRequest httpUriRequest; |
| 83 | try { |
| 84 | httpUriRequest = toClassicHttpRequest(request, options); |
| 85 | } catch (final URISyntaxException e) { |
| 86 | throw new IOException("URL '" + request.url() + "' couldn't be parsed into a URI", e); |
| 87 | } |
| 88 | final HttpHost target = HttpHost.create(URI.create(request.url())); |
| 89 | final HttpClientContext context = configureTimeoutsAndRedirection(options); |
| 90 | |
| 91 | final ClassicHttpResponse httpResponse = |
| 92 | (ClassicHttpResponse) client.execute(target, httpUriRequest, context); |
| 93 | return toFeignResponse(httpResponse, request); |
| 94 | } |
| 95 | |
| 96 | protected HttpClientContext configureTimeoutsAndRedirection(Request.Options options) { |
| 97 | final HttpClientContext context = new HttpClientContext(); |
| 98 | // per request timeouts |
| 99 | final RequestConfig requestConfig = |
| 100 | (client instanceof Configurable |
| 101 | ? RequestConfig.copy(((Configurable) client).getConfig()) |
| 102 | : RequestConfig.custom()) |
| 103 | .setConnectTimeout(options.connectTimeout(), options.connectTimeoutUnit()) |
| 104 | .setResponseTimeout(options.readTimeout(), options.readTimeoutUnit()) |
| 105 | .setRedirectsEnabled(options.isFollowRedirects()) |
| 106 | .build(); |
| 107 | context.setRequestConfig(requestConfig); |
| 108 | return context; |
| 109 | } |
| 110 | |
| 111 | ClassicHttpRequest toClassicHttpRequest(Request request, Request.Options options) |
| 112 | throws URISyntaxException { |
| 113 | final ClassicRequestBuilder requestBuilder = |
| 114 | ClassicRequestBuilder.create(request.httpMethod().name()); |
| 115 | |
| 116 | final URI uri = new URIBuilder(request.url()).build(); |
| 117 | |
| 118 | requestBuilder.setUri(uri.getScheme() + "://" + uri.getAuthority() + uri.getRawPath()); |
| 119 | |
| 120 | // request query params |
| 121 | final List<NameValuePair> queryParams = URLEncodedUtils.parse(uri, requestBuilder.getCharset()); |
| 122 | for (final NameValuePair queryParam : queryParams) { |
| 123 | requestBuilder.addParameter(queryParam); |
| 124 | } |
nothing calls this directly
no outgoing calls
no test coverage detected