public void start(final HttpProcessor httpProcessor) { if (requesterRef.get() == null) { final HttpRequestExecutor requestExecutor = new HttpRequestExecutor( HttpRequestExecutor.DEFAULT_WAIT_FOR_CONTINUE, DefaultConnectionReuseStrategy.INSTANCE, LoggingHttp1StreamListener.INSTANCE); final StrictConnPool<HttpHost, HttpClientConnection> connPool = new StrictConnPool<>( 20, 50, TimeValue.NEG_ONE_MILLISECONDS, PoolReusePolicy.LIFO, LoggingConnPoolListener.INSTANCE); final HttpRequester requester = new HttpRequester( requestExecutor, httpProcessor != null ? httpProcessor : HttpProcessors.client(), connPool, socketConfig, new DefaultBHttpClientConnectionFactory(H1Config.DEFAULT, CharCodingConfig.DEFAULT), sslContext != null ? sslContext.getSocketFactory() : null, DefaultAddressResolver.INSTANCE); requesterRef.compareAndSet(null, requester); } else { throw new IllegalStateException("Requester has already been started"); } }
public ClassicHttpResponse execute( final HttpClientConnection connection, final ClassicHttpRequest request, final HttpResponseInformationCallback informationCallback, final HttpContext context) throws HttpException, IOException { Args.notNull(connection, "HTTP connection"); Args.notNull(request, "HTTP request"); Args.notNull(context, "HTTP context"); if (!connection.isOpen()) { throw new ConnectionClosedException(); } requestExecutor.preProcess(request, httpProcessor, context); final ClassicHttpResponse response = requestExecutor.execute(request, connection, informationCallback, context); requestExecutor.postProcess(response, httpProcessor, context); return response; }
public boolean keepAlive( final HttpClientConnection connection, final ClassicHttpRequest request, final ClassicHttpResponse response, final HttpContext context) throws IOException { final boolean keepAlive = requestExecutor.keepAlive(request, response, connection, context); if (!keepAlive) { connection.close(); } return keepAlive; }
final HttpProcessor httprocessor = Mockito.mock(HttpProcessor.class); try { final HttpRequestExecutor executor = new HttpRequestExecutor(); executor.execute(null, conn, context); Assert.fail("IllegalArgumentException expected"); } catch (final IllegalArgumentException expected) { final HttpRequestExecutor executor = new HttpRequestExecutor(); executor.execute(request, null, context); Assert.fail("IllegalArgumentException expected"); } catch (final IllegalArgumentException expected) { final HttpRequestExecutor executor = new HttpRequestExecutor(); executor.execute(request, conn, null); Assert.fail("IllegalArgumentException expected"); } catch (final IllegalArgumentException expected) { final HttpRequestExecutor executor = new HttpRequestExecutor(); executor.preProcess(null, httprocessor, context); Assert.fail("IllegalArgumentException expected"); } catch (final IllegalArgumentException expected) { final HttpRequestExecutor executor = new HttpRequestExecutor(); executor.preProcess(request, null, context); Assert.fail("IllegalArgumentException expected"); } catch (final IllegalArgumentException expected) { final HttpRequestExecutor executor = new HttpRequestExecutor(); executor.preProcess(request, httprocessor, null);
@Test public void testExecutionRuntimeException() throws Exception { final HttpClientConnection conn = Mockito.mock(HttpClientConnection.class); final HttpRequestExecutor executor = new HttpRequestExecutor(); final HttpCoreContext context = HttpCoreContext.create(); final ClassicHttpRequest request = new BasicClassicHttpRequest("GET", "/"); Mockito.doThrow(new RuntimeException("Oopsie")).when(conn).receiveResponseHeader(); try { executor.execute(request, conn, context); Assert.fail("IOException should have been thrown"); } catch (final RuntimeException ex) { Mockito.verify(conn).close(); } }
context.setAttribute(HttpClientContext.REQUEST_CONFIG, this.requestConfig); this.requestExec.preProcess(connect, this.httpProcessor, context); response = this.requestExec.execute(connect, conn, context);
/** * Sends the request and obtain a response. * * @param request the request to execute. * @param conn the connection over which to execute the request. * @param context the context * @return the response to the request. * * @throws IOException in case of an I/O error. * @throws HttpException in case of HTTP protocol violation or a processing * problem. */ public ClassicHttpResponse execute( final ClassicHttpRequest request, final HttpClientConnection conn, final HttpContext context) throws IOException, HttpException { return execute(request, conn, null, context); }
@Test public void testExecutionNoResponseBody() throws Exception { final HttpProcessor httprocessor = Mockito.mock(HttpProcessor.class); final HttpClientConnection conn = Mockito.mock(HttpClientConnection.class); final HttpRequestExecutor executor = new HttpRequestExecutor(); final HttpCoreContext context = HttpCoreContext.create(); final ClassicHttpRequest request = new BasicClassicHttpRequest("GET", "/"); executor.preProcess(request, httprocessor, context); Mockito.verify(httprocessor).process(request, request.getEntity(), context); Mockito.when(conn.receiveResponseHeader()).thenReturn( new BasicClassicHttpResponse(204, "OK")); final ClassicHttpResponse response = executor.execute(request, conn, context); Mockito.verify(conn).sendRequestHeader(request); Mockito.verify(conn).flush(); Mockito.verify(conn).receiveResponseHeader(); Mockito.verify(conn, Mockito.never()).receiveResponseEntity(response); executor.postProcess(response, httprocessor, context); Mockito.verify(httprocessor).process(response, response.getEntity(), context); }
@Test public void testExecutionIOException() throws Exception { final HttpClientConnection conn = Mockito.mock(HttpClientConnection.class); final HttpRequestExecutor executor = new HttpRequestExecutor(); final HttpCoreContext context = HttpCoreContext.create(); final ClassicHttpRequest request = new BasicClassicHttpRequest("GET", "/"); Mockito.doThrow(new IOException("Oopsie")).when(conn).sendRequestHeader(request); try { executor.execute(request, conn, context); Assert.fail("IOException should have been thrown"); } catch (final IOException ex) { Mockito.verify(conn).close(); } }
/** * Sends the request and obtain a response. * * @param request the request to execute. * @param conn the connection over which to execute the request. * @param context the context * @return the response to the request. * * @throws IOException in case of an I/O error. * @throws HttpException in case of HTTP protocol violation or a processing * problem. */ public ClassicHttpResponse execute( final ClassicHttpRequest request, final HttpClientConnection conn, final HttpContext context) throws IOException, HttpException { return execute(request, conn, null, context); }
@Test public void testExecutionHead() throws Exception { final HttpProcessor httprocessor = Mockito.mock(HttpProcessor.class); final HttpClientConnection conn = Mockito.mock(HttpClientConnection.class); final HttpRequestExecutor executor = new HttpRequestExecutor(); final HttpCoreContext context = HttpCoreContext.create(); final ClassicHttpRequest request = new BasicClassicHttpRequest("HEAD", "/"); executor.preProcess(request, httprocessor, context); Mockito.verify(httprocessor).process(request, request.getEntity(), context); Mockito.when(conn.receiveResponseHeader()).thenReturn( new BasicClassicHttpResponse(200, "OK")); final ClassicHttpResponse response = executor.execute(request, conn, context); Mockito.verify(conn).sendRequestHeader(request); Mockito.verify(conn).flush(); Mockito.verify(conn).receiveResponseHeader(); Mockito.verify(conn, Mockito.never()).receiveResponseEntity(response); executor.postProcess(response, httprocessor, context); Mockito.verify(httprocessor).process(response, response.getEntity(), context); }
public ClassicHttpResponse execute( final HttpClientConnection connection, final ClassicHttpRequest request, final HttpResponseInformationCallback informationCallback, final HttpContext context) throws HttpException, IOException { Args.notNull(connection, "HTTP connection"); Args.notNull(request, "HTTP request"); Args.notNull(context, "HTTP context"); if (!connection.isOpen()) { throw new ConnectionClosedException(); } requestExecutor.preProcess(request, httpProcessor, context); final ClassicHttpResponse response = requestExecutor.execute(request, connection, informationCallback, context); requestExecutor.postProcess(response, httpProcessor, context); return response; }
public void start(final HttpProcessor httpProcessor) { if (requesterRef.get() == null) { final HttpRequestExecutor requestExecutor = new HttpRequestExecutor( HttpRequestExecutor.DEFAULT_WAIT_FOR_CONTINUE, DefaultConnectionReuseStrategy.INSTANCE, LoggingHttp1StreamListener.INSTANCE); final StrictConnPool<HttpHost, HttpClientConnection> connPool = new StrictConnPool<>( 20, 50, TimeValue.NEG_ONE_MILLISECONDS, PoolReusePolicy.LIFO, LoggingConnPoolListener.INSTANCE); final HttpRequester requester = new HttpRequester( requestExecutor, httpProcessor != null ? httpProcessor : HttpProcessors.client(), connPool, socketConfig, new DefaultBHttpClientConnectionFactory(H1Config.DEFAULT, CharCodingConfig.DEFAULT), sslContext != null ? sslContext.getSocketFactory() : null, DefaultAddressResolver.INSTANCE); requesterRef.compareAndSet(null, requester); } else { throw new IllegalStateException("Requester has already been started"); } }
@Override public ClassicHttpResponse execute( final ClassicHttpRequest request, final HttpRequestExecutor requestExecutor, final HttpContext context) throws IOException, HttpException { Args.notNull(request, "HTTP request"); Args.notNull(requestExecutor, "Request executor"); return requestExecutor.execute(request, getValidatedConnection(), context); }
public boolean keepAlive( final HttpClientConnection connection, final ClassicHttpRequest request, final ClassicHttpResponse response, final HttpContext context) throws IOException { final boolean keepAlive = requestExecutor.keepAlive(request, response, connection, context); if (!keepAlive) { connection.close(); } return keepAlive; }
@Test public void testExecutionEntityEnclosingRequest() throws Exception { final HttpProcessor httprocessor = Mockito.mock(HttpProcessor.class); final HttpClientConnection conn = Mockito.mock(HttpClientConnection.class); final HttpRequestExecutor executor = new HttpRequestExecutor(); final HttpCoreContext context = HttpCoreContext.create(); final ClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); final HttpEntity entity = Mockito.mock(HttpEntity.class); request.setEntity(entity); executor.preProcess(request, httprocessor, context); Mockito.verify(httprocessor).process(request, request.getEntity(), context); Mockito.when(conn.receiveResponseHeader()).thenReturn( new BasicClassicHttpResponse(200, "OK")); final ClassicHttpResponse response = executor.execute(request, conn, context); Mockito.verify(conn).sendRequestHeader(request); Mockito.verify(conn).sendRequestEntity(request); Mockito.verify(conn).flush(); Mockito.verify(conn).receiveResponseHeader(); Mockito.verify(conn).receiveResponseEntity(response); executor.postProcess(response, httprocessor, context); Mockito.verify(httprocessor).process(response, response.getEntity(), context); }
MinimalHttpClient(final HttpClientConnectionManager connManager) { super(); this.connManager = Args.notNull(connManager, "HTTP connection manager"); this.reuseStrategy = DefaultConnectionReuseStrategy.INSTANCE; this.schemePortResolver = DefaultSchemePortResolver.INSTANCE; this.requestExecutor = new HttpRequestExecutor(this.reuseStrategy); this.httpProcessor = new DefaultHttpProcessor( new RequestContent(), new RequestTargetHost(), new RequestClientConnControl(), new RequestUserAgent(VersionInfo.getSoftwareInfo( "Apache-HttpClient", "org.apache.hc.client5", getClass()))); }
@Override public ClassicHttpResponse execute( final ClassicHttpRequest request, final HttpRequestExecutor requestExecutor, final HttpContext context) throws IOException, HttpException { Args.notNull(request, "HTTP request"); Args.notNull(requestExecutor, "Request executor"); final ManagedHttpClientConnection connection = getValidatedPoolEntry().getConnection(); return requestExecutor.execute(request, connection, context); }
private void releaseConnection() throws IOException { try { final HttpClientConnection localConn = connectionHolder.getConnection(); if (localConn != null) { if (requestExecutor.keepAlive(request, response, localConn, context)) { if (super.isStreaming()) { Closer.close(super.getContent()); } connectionHolder.releaseConnection(); } } } finally { connectionHolder.discardConnection(); } }
@Test public void testBasicExecution() throws Exception { final HttpProcessor httprocessor = Mockito.mock(HttpProcessor.class); final HttpClientConnection conn = Mockito.mock(HttpClientConnection.class); final HttpRequestExecutor executor = new HttpRequestExecutor(); final HttpCoreContext context = HttpCoreContext.create(); final ClassicHttpRequest request = new BasicClassicHttpRequest("GET", "/"); executor.preProcess(request, httprocessor, context); Mockito.verify(httprocessor).process(request, request.getEntity(), context); Mockito.when(conn.receiveResponseHeader()).thenReturn( new BasicClassicHttpResponse(200, "OK")); final ClassicHttpResponse response = executor.execute(request, conn, context); Mockito.verify(conn).sendRequestHeader(request); Mockito.verify(conn).flush(); Mockito.verify(conn).receiveResponseHeader(); Mockito.verify(conn).receiveResponseEntity(response); executor.postProcess(response, httprocessor, context); Mockito.verify(httprocessor).process(response, response.getEntity(), context); Assert.assertSame(request, context.getRequest()); Assert.assertSame(response, context.getResponse()); }