Class ApacheConnector

java.lang.Object
org.glassfish.jersey.apache.connector.ApacheConnector
All Implemented Interfaces:
Connector, Inflector<ClientRequest,ClientResponse>

class ApacheConnector extends Object implements Connector
A Connector that utilizes the Apache HTTP Client to send and receive HTTP request and responses.

The following properties are only supported at construction of this class:

This connector uses chunked encoding as a default setting. This can be overridden by the ClientProperties.REQUEST_ENTITY_PROCESSING. By default the ClientProperties.CHUNKED_ENCODING_SIZE property is only supported by using default connection manager. If custom connection manager needs to be used then chunked encoding size can be set by providing a custom HttpClientConnection (via custom ManagedHttpClientConnectionFactory) and overriding createOutputStream method.

Using of authorization is dependent on the chunk encoding setting. If the entity buffering is enabled, the entity is buffered and authorization can be performed automatically in response to a 401 by sending the request again. When entity buffering is disabled (chunked encoding is used) then the property ApacheClientProperties.PREEMPTIVE_BASIC_AUTHENTICATION must be set to true.

If a ClientResponse is obtained and an entity is not read from the response then InboundMessageContext.close() MUST be called after processing the response to release connection-based resources.

Client operations are thread safe, the HTTP connection may be shared between different threads.

If a response entity is obtained that is an instance of Closeable then the instance MUST be closed after processing the entity to release connection-based resources.

The following methods are currently supported: HEAD, GET, POST, PUT, DELETE, OPTIONS, PATCH and TRACE.

See Also:
  • Field Details

    • LOGGER

      private static final Logger LOGGER
    • vi

      private static final org.apache.http.util.VersionInfo vi
    • release

      private static final String release
    • client

      private final org.apache.http.impl.client.CloseableHttpClient client
    • cookieStore

      private final org.apache.http.client.CookieStore cookieStore
    • preemptiveBasicAuth

      private final boolean preemptiveBasicAuth
    • requestConfig

      private final org.apache.http.client.config.RequestConfig requestConfig
  • Constructor Details

    • ApacheConnector

      ApacheConnector(javax.ws.rs.client.Client client, javax.ws.rs.core.Configuration config)
      Create the new Apache HTTP Client connector.
      Parameters:
      client - JAX-RS client instance for which the connector is being created.
      config - client configuration.
  • Method Details

    • getConnectionManager

      private org.apache.http.conn.HttpClientConnectionManager getConnectionManager(javax.ws.rs.client.Client client, javax.ws.rs.core.Configuration config, SSLContext sslContext)
    • createConnectionManager

      private org.apache.http.conn.HttpClientConnectionManager createConnectionManager(javax.ws.rs.client.Client client, javax.ws.rs.core.Configuration config, SSLContext sslContext, boolean useSystemProperties)
    • split

      private static String[] split(String s)
    • getHttpClient

      public org.apache.http.client.HttpClient getHttpClient()
      Get the HttpClient.
      Returns:
      the HttpClient.
    • getCookieStore

      public org.apache.http.client.CookieStore getCookieStore()
      Get the CookieStore.
      Returns:
      the CookieStore instance or null when "jersey.config.apache.client.handleCookies" set to true.
    • getProxyUri

      private static URI getProxyUri(Object proxy)
    • apply

      public ClientResponse apply(ClientRequest clientRequest) throws javax.ws.rs.ProcessingException
      Description copied from interface: Connector
      Synchronously process client request into a response. The method is used by Jersey client runtime to synchronously send a request and receive a response.
      Specified by:
      apply in interface Connector
      Specified by:
      apply in interface Inflector<ClientRequest,ClientResponse>
      Parameters:
      clientRequest - Jersey client request to be sent.
      Returns:
      Jersey client response received for the client request.
      Throws:
      javax.ws.rs.ProcessingException - in case of any invocation failure.
    • apply

      public Future<?> apply(ClientRequest request, AsyncConnectorCallback callback)
      Description copied from interface: Connector
      Asynchronously process client request into a response. The method is used by Jersey client runtime to asynchronously send a request and receive a response.
      Specified by:
      apply in interface Connector
      Parameters:
      request - Jersey client request to be sent.
      callback - Jersey asynchronous connector callback to asynchronously receive the request processing result (either a response or a failure).
      Returns:
      asynchronously executed task handle.
    • getName

      public String getName()
      Description copied from interface: Connector
      Get name of current connector. Should contain identification of underlying specification and optionally version number. Will be used in User-Agent header.
      Specified by:
      getName in interface Connector
      Returns:
      name of current connector. Returning null or empty string means not including this information in a generated "User-Agent" header.
    • close

      public void close()
      Description copied from interface: Connector
      Close connector and release all it's internally associated resources.
      Specified by:
      close in interface Connector
    • getHost

      private org.apache.http.HttpHost getHost(org.apache.http.client.methods.HttpUriRequest request)
    • getUriHttpRequest

      private org.apache.http.client.methods.HttpUriRequest getUriHttpRequest(ClientRequest clientRequest)
    • getHttpEntity

      private org.apache.http.HttpEntity getHttpEntity(ClientRequest clientRequest, boolean bufferingEnabled)
    • writeOutBoundHeaders

      private static Map<String,String> writeOutBoundHeaders(javax.ws.rs.core.MultivaluedMap<String,Object> headers, org.apache.http.client.methods.HttpUriRequest request)
    • getInputStream

      private static InputStream getInputStream(org.apache.http.client.methods.CloseableHttpResponse response) throws IOException
      Throws:
      IOException