Skip to content

Commit

Permalink
Add possibility to possibility to extend DropwizardApacheConnector
Browse files Browse the repository at this point in the history
For powerful users who want to control Jersey-Apache HTTP clients
integration.
  • Loading branch information
arteam committed Nov 24, 2017
1 parent 44efc04 commit f64a21b
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 5 deletions.
Expand Up @@ -172,7 +172,7 @@ private Optional<RequestConfig> addJerseyRequestConfig(ClientRequest clientReque
* @param jerseyRequest representation of an HTTP request in Jersey
* @return a correct {@link org.apache.http.HttpEntity} implementation
*/
private HttpEntity getHttpEntity(ClientRequest jerseyRequest) {
protected HttpEntity getHttpEntity(ClientRequest jerseyRequest) {
if (jerseyRequest.getEntity() == null) {
return null;
}
Expand Down
Expand Up @@ -414,13 +414,19 @@ private Configuration buildConfig(final String name, final ExecutorService threa
if (connectorProvider == null) {
final ConfiguredCloseableHttpClient apacheHttpClient =
apacheHttpClientBuilder.buildWithDefaultRequestConfiguration(name);
connectorProvider = (client, runtimeConfig) -> new DropwizardApacheConnector(
apacheHttpClient.getClient(),
apacheHttpClient.getDefaultRequestConfig(),
configuration.isChunkedEncodingEnabled());
connectorProvider = (client, runtimeConfig) -> createDropwizardApacheConnector(apacheHttpClient);
}
config.connectorProvider(connectorProvider);

return config;
}

/**
* Builds {@link DropwizardApacheConnector} based on the configured Apache HTTP client
* as {@link ConfiguredCloseableHttpClient} and the chunked encoding configuration set by the user.
*/
protected DropwizardApacheConnector createDropwizardApacheConnector(ConfiguredCloseableHttpClient configuredClient) {
return new DropwizardApacheConnector(configuredClient.getClient(), configuredClient.getDefaultRequestConfig(),
configuration.isChunkedEncodingEnabled());
}
}
Expand Up @@ -12,7 +12,9 @@
import io.dropwizard.lifecycle.setup.ExecutorServiceBuilder;
import io.dropwizard.lifecycle.setup.LifecycleEnvironment;
import io.dropwizard.setup.Environment;
import org.apache.http.HttpEntity;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.entity.GzipCompressingEntity;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.DnsResolver;
Expand All @@ -21,10 +23,12 @@
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.SystemDefaultCredentialsProvider;
import org.apache.http.impl.conn.SystemDefaultDnsResolver;
import org.apache.http.impl.conn.SystemDefaultRoutePlanner;
import org.glassfish.jersey.client.ClientRequest;
import org.glassfish.jersey.client.rx.RxClient;
import org.glassfish.jersey.client.rx.java8.RxCompletionStageInvoker;
import org.junit.After;
Expand Down Expand Up @@ -331,6 +335,22 @@ public void usesACustomCredentialsProvider() {
verify(apacheHttpClientBuilder).using(customCredentialsProvider);
}

@Test
public void apacheConnectorCanOverridden() {
assertThat(new JerseyClientBuilder(new MetricRegistry()) {
@Override
protected DropwizardApacheConnector createDropwizardApacheConnector(ConfiguredCloseableHttpClient configuredClient) {
return new DropwizardApacheConnector(configuredClient.getClient(), configuredClient.getDefaultRequestConfig(),
true) {
@Override
protected HttpEntity getHttpEntity(ClientRequest jerseyRequest) {
return new GzipCompressingEntity(new ByteArrayEntity((byte[]) jerseyRequest.getEntity()));
}
};
}
}.using(environment).build("test")).isNotNull();
}

@Provider
@Consumes(MediaType.APPLICATION_SVG_XML)
public static class FakeMessageBodyReader implements MessageBodyReader<JerseyClientBuilderTest> {
Expand Down

0 comments on commit f64a21b

Please sign in to comment.