org.apache.http.impl.execchain

## Class ProtocolExec

- java.lang.Object
- - org.apache.http.impl.execchain.ProtocolExec

All Implemented Interfaces:
  ClientExecChain

    @Contract(threading=IMMUTABLE_CONDITIONAL)
    public class ProtocolExec
    extends Object
    implements ClientExecChain

Request executor in the request execution chain that is responsible for implementation of HTTP specification requirements. Internally this executor relies on a `HttpProcessor` to populate requisite HTTP request headers, process HTTP response headers and update session state in `HttpClientContext`.

Further responsibilities such as communication with the opposite endpoint is delegated to the next executor in the request execution chain.

Since:
  4.3

### Constructor Summary

Constructors
Constructor and Description
`ProtocolExec(ClientExecChain requestExecutor, org.apache.http.protocol.HttpProcessor httpProcessor)`

### Method Summary

Methods
`CloseableHttpResponse` `execute(HttpRoute route, HttpRequestWrapper request, HttpClientContext context, HttpExecutionAware execAware)` Executes th request either by transmitting it to the target server or by passing it onto the next executor in the request execution chain.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### ProtocolExec

    public ProtocolExec(ClientExecChain requestExecutor,
                org.apache.http.protocol.HttpProcessor httpProcessor)

### Method Detail

#### execute

    public CloseableHttpResponse execute(HttpRoute route,
                                HttpRequestWrapper request,
                                HttpClientContext context,
                                HttpExecutionAware execAware)
                                  throws IOException,
                                         org.apache.http.HttpException

Description copied from interface: `ClientExecChain`
Executes th request either by transmitting it to the target server or by passing it onto the next executor in the request execution chain.

Specified by:
  `execute` in interface `ClientExecChain`
Parameters:
  `route` - connection route.
  `request` - current request.
  `context` - current HTTP context.
  `execAware` - receiver of notifications of blocking I/O operations.
Returns:
  HTTP response either received from the opposite endpoint or generated locally.
Throws:
  `IOException` - in case of a I/O error. (this type of exceptions are potentially recoverable).
  `org.apache.http.HttpException` - in case of an HTTP protocol error (usually this type of exceptions are non-recoverable).