private RequestConfig retrieveRequestConfig(HttpComponentsClientHttpRequestFactory factory) throws Exception { URI uri = new URI(baseUrl + "/status/ok"); HttpComponentsClientHttpRequest request = (HttpComponentsClientHttpRequest) factory.createRequest(uri, HttpMethod.GET); return (RequestConfig) request.getHttpContext().getAttribute(HttpClientContext.REQUEST_CONFIG); }
@Test public void assertCustomConfig() throws Exception { HttpClient httpClient = HttpClientBuilder.create().build(); HttpComponentsClientHttpRequestFactory hrf = new HttpComponentsClientHttpRequestFactory(httpClient); hrf.setConnectTimeout(1234); hrf.setConnectionRequestTimeout(4321); hrf.setReadTimeout(4567); URI uri = new URI(baseUrl + "/status/ok"); HttpComponentsClientHttpRequest request = (HttpComponentsClientHttpRequest) hrf.createRequest(uri, HttpMethod.GET); Object config = request.getHttpContext().getAttribute(HttpClientContext.REQUEST_CONFIG); assertNotNull("Request config should be set", config); assertTrue("Wrong request config type" + config.getClass().getName(), RequestConfig.class.isInstance(config)); RequestConfig requestConfig = (RequestConfig) config; assertEquals("Wrong custom connection timeout", 1234, requestConfig.getConnectTimeout()); assertEquals("Wrong custom connection request timeout", 4321, requestConfig.getConnectionRequestTimeout()); assertEquals("Wrong custom socket timeout", 4567, requestConfig.getSocketTimeout()); }
@Override public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException { ClientHttpRequest request = super.createRequest(uri, httpMethod); TimeoutConfig config = timeoutConfig.get(); if(config == null){ return request; } timeoutConfig.remove(); try { Field httpContextField = request.getClass().getDeclaredField("httpContext"); httpContextField.setAccessible(true); HttpContext httpContext = (HttpContext) httpContextField.get(request); RequestConfig requestConfig = (RequestConfig) httpContext.getAttribute("http.request-config"); Field connectTimeoutField = requestConfig.getClass().getDeclaredField("connectTimeout"); connectTimeoutField.setAccessible(true); connectTimeoutField.set(requestConfig, config.connectTimeout); Field socketTimeoutField = requestConfig.getClass().getDeclaredField("socketTimeout"); socketTimeoutField.setAccessible(true); socketTimeoutField.set(requestConfig, config.readTimeout); }catch (Throwable t){ throw new IOException(t.getCause()); } return request; }
ClientHttpRequest request = requestFactory.createRequest(new URI(url), HttpUtil.toHttpMethod(method)); setHeaders(request, headersList); if (body != null) {