public class HttpUrlConnectorProvider extends Object implements ConnectorProvider
connector
provider
that provides connector instances which delegate HTTP requests to HttpURLConnection
for processing.
The provided connector instances override default behaviour of the property
ClientProperties.REQUEST_ENTITY_PROCESSING
and use RequestEntityProcessing.BUFFERED
request entity processing by default.
Due to a bug in the chunked transport coding support of HttpURLConnection
that causes
requests to fail unpredictably, this connector provider allows to configure the provided connector
instances to use HttpURLConnection
's fixed-length streaming mode as a workaround. This
workaround can be enabled via useFixedLengthStreaming()
method or via
USE_FIXED_LENGTH_STREAMING
Jersey client configuration property.
Modifier and Type | Class and Description |
---|---|
static interface |
HttpUrlConnectorProvider.ConnectionFactory
A factory for
HttpURLConnection instances. |
Modifier and Type | Field and Description |
---|---|
static String |
SET_METHOD_WORKAROUND
A value of
true declares that the client will try to set
unsupported HTTP method to HttpURLConnection via
reflection as a workaround for a missing HTTP method. |
static String |
USE_FIXED_LENGTH_STREAMING
If
true , the HttpUrlConnector (if used) will assume the content length
from the value of "Content-Length" request
header (if present). |
Constructor and Description |
---|
HttpUrlConnectorProvider()
Create new
HttpURLConnection -based Jersey client connector provider. |
Modifier and Type | Method and Description |
---|---|
HttpUrlConnectorProvider |
chunkSize(int chunkSize)
Set chunk size for requests transferred using a
HTTP chunked transfer coding.
|
HttpUrlConnectorProvider |
connectionFactory(HttpUrlConnectorProvider.ConnectionFactory connectionFactory)
Set a custom
HttpURLConnection factory. |
protected Connector |
createHttpUrlConnector(Client client,
HttpUrlConnectorProvider.ConnectionFactory connectionFactory,
int chunkSize,
boolean fixLengthStreaming,
boolean setMethodWorkaround)
Create
HttpUrlConnector . |
boolean |
equals(Object o) |
Connector |
getConnector(Client client,
Configuration config)
Get a Jersey client connector instance for a given
client instance
and Jersey client runtime configuration . |
int |
hashCode() |
HttpUrlConnectorProvider |
useFixedLengthStreaming()
Instruct the provided connectors to use the
fixed-length streaming mode on the underlying HTTP URL connection instance when sending requests. |
HttpUrlConnectorProvider |
useSetMethodWorkaround()
Instruct the provided connectors to use reflection when setting the
HTTP method value.See
SET_METHOD_WORKAROUND property documentation for more details. |
public static final String USE_FIXED_LENGTH_STREAMING
true
, the HttpUrlConnector
(if used) will assume the content length
from the value of "Content-Length" request
header (if present).
When this property is enabled and the request has a valid non-zero content length
value specified in its "Content-Length" request
header, that this value will be used as an input to the
HttpURLConnection.setFixedLengthStreamingMode(int)
method call
invoked on the underlying connection
.
This will also suppress the entity buffering in the @{code HttpURLConnection},
which is undesirable in certain scenarios, e.g. when streaming large entities.
Note that the content length value defined in the request header must exactly match
the real size of the entity. If the HttpHeaders.CONTENT_LENGTH
header
is explicitly specified in a request, this property will be ignored and the
request entity will be still buffered by the underlying @{code HttpURLConnection} infrastructure.
This property also overrides the behaviour enabled by the
ClientProperties.CHUNKED_ENCODING_SIZE
property.
Chunked encoding will only be used, if the size is not specified in the header of the request.
Note that this property only applies to client run-times that are configured to use the default
HttpUrlConnector
as the client connector. The property is ignored by other connectors.
The default value is false
.
The name of the configuration property is "jersey.config.client.httpUrlConnector.useFixedLengthStreaming".
public static final String SET_METHOD_WORKAROUND
true
declares that the client will try to set
unsupported HTTP method to HttpURLConnection
via
reflection as a workaround for a missing HTTP method.
NOTE: Enabling this property may cause security related warnings/errors and it may break when other JDK implementation is used. Use only when you know what you are doing.
The value MUST be an instance of Boolean
.
The default value is false
.
The name of the configuration property is "jersey.config.client.httpUrlConnection.setMethodWorkaround".
Since JDK 16 the JDK internal classes are not opened for reflection and the workaround method does not work,
unless --add-opens java.base/java.net=ALL-UNNAMED
for HTTP requests and additional
--add-opens java.base/sun.net.www.protocol.https=ALL-UNNAMED
for HTTPS (HttpsUrlConnection) options are set.
public HttpUrlConnectorProvider()
HttpURLConnection
-based Jersey client connector provider.public HttpUrlConnectorProvider connectionFactory(HttpUrlConnectorProvider.ConnectionFactory connectionFactory)
HttpURLConnection
factory.connectionFactory
- custom HTTP URL connection factory. Must not be null
.NullPointerException
- in case the supplied connectionFactory is null
.public HttpUrlConnectorProvider chunkSize(int chunkSize)
Note that this programmatically set value can be overridden by
setting the ClientProperties.CHUNKED_ENCODING_SIZE
property
specified in the Jersey client instance configuration.
chunkSize
- chunked transfer coding chunk size to be used.IllegalArgumentException
- in case the specified chunk size is negative.public HttpUrlConnectorProvider useFixedLengthStreaming()
fixed-length streaming mode
on the underlying HTTP URL connection instance when sending requests.
See USE_FIXED_LENGTH_STREAMING
property documentation for more details.
Note that this programmatically set value can be overridden by
setting the USE_FIXED_LENGTH_STREAMING
property specified in the Jersey client instance configuration.
public HttpUrlConnectorProvider useSetMethodWorkaround()
SET_METHOD_WORKAROUND
property documentation for more details.
Note that this programmatically set value can be overridden by
setting the SET_METHOD_WORKAROUND
property specified in the Jersey client instance configuration
or in the request properties.
public Connector getConnector(Client client, Configuration config)
ConnectorProvider
client
instance
and Jersey client runtime configuration
.
Note that the supplied runtime configuration can be different from the client instance
configuration as a single client can be used to serve multiple differently configured runtimes.
While the SSL context
or hostname verifier
are shared, other configuration properties may change in each runtime.
Based on the supplied client and runtime configuration data, it is up to each connector provider implementation to decide whether a new dedicated connector instance is required or if the existing, previously create connector instance can be reused.
getConnector
in interface ConnectorProvider
client
- Jersey client instance.config
- Jersey client runtime configuration.Connector
instance to be used by the client.protected Connector createHttpUrlConnector(Client client, HttpUrlConnectorProvider.ConnectionFactory connectionFactory, int chunkSize, boolean fixLengthStreaming, boolean setMethodWorkaround)
HttpUrlConnector
.client
- JAX-RS client instance for which the connector is being created.connectionFactory
- HttpsURLConnection
factory to be used when creating
connections.chunkSize
- chunk size to use when using HTTP chunked transfer coding.fixLengthStreaming
- specify if the the fixed-length streaming mode
on the underlying HTTP URL connection instances should
be used when sending requests.setMethodWorkaround
- specify if the reflection workaround should be used to set HTTP URL connection method
name. See SET_METHOD_WORKAROUND
for details.HttpUrlConnector
instance.Copyright © 2007-2024, Oracle and/or its affiliates. All Rights Reserved. Use is subject to license terms.