Class ApacheConnector
- All Implemented Interfaces:
Connector
,Inflector<ClientRequest,
ClientResponse>
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:
ApacheClientProperties.CONNECTION_MANAGER
ApacheClientProperties.REQUEST_CONFIG
ApacheClientProperties.CREDENTIALS_PROVIDER
ApacheClientProperties.DISABLE_COOKIES
ClientProperties.PROXY_URI
ClientProperties.PROXY_USERNAME
ClientProperties.PROXY_PASSWORD
ClientProperties.REQUEST_ENTITY_PROCESSING
- default value isRequestEntityProcessing.CHUNKED
ApacheClientProperties.PREEMPTIVE_BASIC_AUTHENTICATION
ApacheClientProperties.RETRY_HANDLER
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:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class
private static class
private static final class
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final org.apache.http.impl.client.CloseableHttpClient
private final org.apache.http.client.CookieStore
private static final Logger
private final boolean
private static final String
private final org.apache.http.client.config.RequestConfig
private static final org.apache.http.util.VersionInfo
-
Constructor Summary
ConstructorsConstructorDescriptionApacheConnector
(javax.ws.rs.client.Client client, javax.ws.rs.core.Configuration config) Create the new Apache HTTP Client connector. -
Method Summary
Modifier and TypeMethodDescriptionapply
(ClientRequest clientRequest) Synchronously process client request into a response.Future
<?> apply
(ClientRequest request, AsyncConnectorCallback callback) Asynchronously process client request into a response.void
close()
Close connector and release all it's internally associated resources.private org.apache.http.conn.HttpClientConnectionManager
createConnectionManager
(javax.ws.rs.client.Client client, javax.ws.rs.core.Configuration config, SSLContext sslContext, boolean useSystemProperties) private org.apache.http.conn.HttpClientConnectionManager
getConnectionManager
(javax.ws.rs.client.Client client, javax.ws.rs.core.Configuration config, SSLContext sslContext) org.apache.http.client.CookieStore
Get theCookieStore
.private org.apache.http.HttpHost
getHost
(org.apache.http.client.methods.HttpUriRequest request) org.apache.http.client.HttpClient
Get theHttpClient
.private org.apache.http.HttpEntity
getHttpEntity
(ClientRequest clientRequest, boolean bufferingEnabled) private static InputStream
getInputStream
(org.apache.http.client.methods.CloseableHttpResponse response) getName()
Get name of current connector.private static URI
getProxyUri
(Object proxy) private org.apache.http.client.methods.HttpUriRequest
getUriHttpRequest
(ClientRequest clientRequest) private static String[]
writeOutBoundHeaders
(javax.ws.rs.core.MultivaluedMap<String, Object> headers, org.apache.http.client.methods.HttpUriRequest request)
-
Field Details
-
LOGGER
-
vi
private static final org.apache.http.util.VersionInfo vi -
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
-
getHttpClient
public org.apache.http.client.HttpClient getHttpClient()Get theHttpClient
.- Returns:
- the
HttpClient
.
-
getCookieStore
public org.apache.http.client.CookieStore getCookieStore()Get theCookieStore
.- Returns:
- the
CookieStore
instance ornull
when "jersey.config.apache.client.handleCookies" set totrue
.
-
getProxyUri
-
apply
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 interfaceConnector
- Specified by:
apply
in interfaceInflector<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
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. -
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. -
close
public void close()Description copied from interface:Connector
Close connector and release all it's internally associated resources. -
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
-
getInputStream
private static InputStream getInputStream(org.apache.http.client.methods.CloseableHttpResponse response) throws IOException - Throws:
IOException
-