Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce docker-java-transport module #1402

Merged
merged 2 commits into from
May 29, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
12 changes: 5 additions & 7 deletions docker-java-core/pom.xml
Expand Up @@ -21,6 +21,11 @@
<artifactId>docker-java-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>docker-java-transport</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
Expand Down Expand Up @@ -70,13 +75,6 @@
<version>3.0.1u2</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>org.immutables</groupId>
<artifactId>value</artifactId>
<version>2.8.2</version>
<scope>provided</scope>
</dependency>
</dependencies>

<build>
Expand Down
Expand Up @@ -2,6 +2,7 @@

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.dockerjava.transport.DockerHttpClient;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.MultimapBuilder;
Expand Down
Expand Up @@ -14,6 +14,7 @@
import com.github.dockerjava.api.exception.NotModifiedException;
import com.github.dockerjava.api.exception.UnauthorizedException;
import com.github.dockerjava.api.model.Frame;
import com.github.dockerjava.transport.DockerHttpClient;
import org.apache.commons.io.IOUtils;

import java.io.ByteArrayInputStream;
Expand Down
Expand Up @@ -148,6 +148,7 @@
import com.github.dockerjava.core.command.UpdateSwarmNodeCmdImpl;
import com.github.dockerjava.core.command.VersionCmdImpl;
import com.github.dockerjava.core.command.WaitContainerCmdImpl;
import com.github.dockerjava.transport.DockerHttpClient;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
Expand Down
Expand Up @@ -3,6 +3,7 @@
import com.github.dockerjava.api.async.ResultCallback;
import com.github.dockerjava.api.model.Frame;
import com.github.dockerjava.api.model.StreamType;
import com.github.dockerjava.transport.DockerHttpClient;

import java.io.InputStream;
import java.util.Arrays;
Expand Down
@@ -1,22 +1,10 @@
package com.github.dockerjava.core;

import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;

import javax.net.ssl.SSLContext;

/**
* Get an SSL Config. Allows for various different implementations.
*
* @deprecated use {@link com.github.dockerjava.transport.SSLConfig}
*/
public interface SSLConfig {
@Deprecated
public interface SSLConfig extends com.github.dockerjava.transport.SSLConfig {

/**
* Get the SSL Context, from wherever it comes (file, keystore).
*
* @return an SSL context.
*/
SSLContext getSSLContext() throws KeyManagementException, UnrecoverableKeyException, NoSuchAlgorithmException,
KeyStoreException;
}
2 changes: 1 addition & 1 deletion docker-java-transport-httpclient5/pom.xml
Expand Up @@ -18,7 +18,7 @@
<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>docker-java-core</artifactId>
<artifactId>docker-java-transport</artifactId>
<version>${project.version}</version>
</dependency>

Expand Down
@@ -1,8 +1,7 @@
package com.github.dockerjava.httpclient5;

import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.DockerHttpClient;
import com.github.dockerjava.core.SSLConfig;
import com.github.dockerjava.transport.SSLConfig;
import com.github.dockerjava.transport.DockerHttpClient;
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
Expand Down Expand Up @@ -44,27 +43,35 @@ public final class ApacheDockerHttpClient implements DockerHttpClient {

public static final class Factory {

private DockerClientConfig dockerClientConfig = null;
private URI dockerHost = null;

public Factory dockerClientConfig(DockerClientConfig value) {
this.dockerClientConfig = value;
private SSLConfig sslConfig = null;

public Factory dockerHost(URI value) {
this.dockerHost = Objects.requireNonNull(value, "dockerHost");
return this;
}

public Factory sslConfig(SSLConfig value) {
this.sslConfig = value;
return this;
}

public ApacheDockerHttpClient build() {
Objects.requireNonNull(dockerClientConfig, "dockerClientConfig");
return new ApacheDockerHttpClient(dockerClientConfig);
Objects.requireNonNull(dockerHost, "dockerHost");
return new ApacheDockerHttpClient(dockerHost, sslConfig);
}
}

private final CloseableHttpClient httpClient;

private final HttpHost host;

private ApacheDockerHttpClient(DockerClientConfig dockerClientConfig) {
Registry<ConnectionSocketFactory> socketFactoryRegistry = createConnectionSocketFactoryRegistry(dockerClientConfig);

URI dockerHost = dockerClientConfig.getDockerHost();
private ApacheDockerHttpClient(
URI dockerHost,
SSLConfig sslConfig
) {
Registry<ConnectionSocketFactory> socketFactoryRegistry = createConnectionSocketFactoryRegistry(sslConfig, dockerHost);

switch (dockerHost.getScheme()) {
case "unix":
Expand Down Expand Up @@ -106,10 +113,12 @@ private ApacheDockerHttpClient(DockerClientConfig dockerClientConfig) {
.build();
}

private Registry<ConnectionSocketFactory> createConnectionSocketFactoryRegistry(DockerClientConfig dockerClientConfig) {
private Registry<ConnectionSocketFactory> createConnectionSocketFactoryRegistry(
SSLConfig sslConfig,
URI dockerHost
) {
RegistryBuilder<ConnectionSocketFactory> socketFactoryRegistryBuilder = RegistryBuilder.create();

SSLConfig sslConfig = dockerClientConfig.getSSLConfig();
if (sslConfig != null) {
try {
SSLContext sslContext = sslConfig.getSSLContext();
Expand All @@ -127,16 +136,12 @@ private Registry<ConnectionSocketFactory> createConnectionSocketFactoryRegistry(
.register("unix", new PlainConnectionSocketFactory() {
@Override
public Socket createSocket(HttpContext context) throws IOException {
URI dockerHost = dockerClientConfig.getDockerHost();

return new UnixDomainSocket(dockerHost.getPath());
}
})
.register("npipe", new PlainConnectionSocketFactory() {
@Override
public Socket createSocket(HttpContext context) {
URI dockerHost = dockerClientConfig.getDockerHost();

return new NamedPipeSocket(dockerHost.getPath());
}
})
Expand Down
Expand Up @@ -6,7 +6,7 @@
import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.DockerClientConfigAware;
import com.github.dockerjava.core.DockerClientImpl;
import com.github.dockerjava.core.DockerHttpClient;
import com.github.dockerjava.transport.DockerHttpClient;
import org.glassfish.jersey.client.RequestEntityProcessing;

import javax.ws.rs.client.ClientRequestFilter;
Expand Down Expand Up @@ -37,7 +37,9 @@ public final DockerCmdExecFactory getDockerCmdExecFactory() {

@Override
public void init(DockerClientConfig dockerClientConfig) {
clientFactory = clientFactory.dockerClientConfig(dockerClientConfig);
clientFactory = clientFactory
.dockerHost(dockerClientConfig.getDockerHost())
.sslConfig(dockerClientConfig.getSSLConfig());
dockerCmdExecFactory = new DefaultDockerCmdExecFactory(
clientFactory.build(),
dockerClientConfig.getObjectMapper()
Expand Down
@@ -1,11 +1,9 @@
package com.github.dockerjava.jaxrs;

import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
import com.github.dockerjava.api.exception.DockerClientException;
import com.github.dockerjava.api.exception.DockerException;
import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.DockerHttpClient;
import com.github.dockerjava.core.SSLConfig;
import com.github.dockerjava.transport.DockerHttpClient;
import com.github.dockerjava.transport.SSLConfig;
import com.github.dockerjava.jaxrs.filter.ResponseStatusExceptionFilter;
import com.github.dockerjava.jaxrs.filter.SelectiveLoggingFilter;
import org.apache.http.client.config.RequestConfig;
Expand Down Expand Up @@ -42,12 +40,15 @@
import java.net.URISyntaxException;
import java.util.List;
import java.util.Map;
import java.util.Objects;

public final class JerseyDockerHttpClient implements DockerHttpClient {

public static final class Factory {

private DockerClientConfig dockerClientConfig = null;
private URI dockerHost = null;

private SSLConfig sslConfig = null;

private Integer readTimeout = null;

Expand All @@ -65,8 +66,13 @@ public static final class Factory {

private RequestEntityProcessing requestEntityProcessing;

public Factory dockerClientConfig(DockerClientConfig value) {
this.dockerClientConfig = value;
public Factory dockerHost(URI value) {
this.dockerHost = Objects.requireNonNull(value, "dockerHost");
return this;
}

public Factory sslConfig(SSLConfig value) {
this.sslConfig = value;
return this;
}

Expand Down Expand Up @@ -112,7 +118,8 @@ public Factory requestEntityProcessing(RequestEntityProcessing value) {

public JerseyDockerHttpClient build() {
return new JerseyDockerHttpClient(
dockerClientConfig,
dockerHost,
sslConfig,
maxTotalConnections,
maxPerRouteConnections,
connectionRequestTimeout,
Expand All @@ -134,7 +141,8 @@ public JerseyDockerHttpClient build() {
private final URI originalUri;

private JerseyDockerHttpClient(
DockerClientConfig dockerClientConfig,
URI dockerHost,
SSLConfig sslConfig,
Integer maxTotalConnections,
Integer maxPerRouteConnections,
Integer connectionRequestTimeout,
Expand All @@ -152,12 +160,10 @@ private JerseyDockerHttpClient(
clientConfig.property(ClientProperties.REQUEST_ENTITY_PROCESSING, requestEntityProcessing);
}

clientConfig.register(new ResponseStatusExceptionFilter(dockerClientConfig.getObjectMapper()));
clientConfig.register(new ResponseStatusExceptionFilter());
// clientConfig.register(JsonClientFilter.class);
RequestConfig.Builder requestConfigBuilder = RequestConfig.custom();

clientConfig.register(new JacksonJsonProvider(dockerClientConfig.getObjectMapper()));

// logging may disabled via log level
clientConfig.register(new SelectiveLoggingFilter(LOGGER, true));

Expand Down Expand Up @@ -187,12 +193,9 @@ private JerseyDockerHttpClient(
}
}

URI dockerHost = dockerClientConfig.getDockerHost();

SSLContext sslContext = null;

try {
final SSLConfig sslConfig = dockerClientConfig.getSSLConfig();
if (sslConfig != null) {
sslContext = sslConfig.getSSLContext();
}
Expand Down
@@ -1,22 +1,7 @@
package com.github.dockerjava.jaxrs.filter;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientResponseContext;
import javax.ws.rs.client.ClientResponseFilter;
import javax.ws.rs.core.MediaType;

import com.github.dockerjava.core.DefaultDockerClientConfig;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import com.github.dockerjava.api.exception.BadRequestException;
import com.github.dockerjava.api.exception.ConflictException;
import com.github.dockerjava.api.exception.DockerException;
Expand All @@ -25,6 +10,17 @@
import com.github.dockerjava.api.exception.NotFoundException;
import com.github.dockerjava.api.exception.NotModifiedException;
import com.github.dockerjava.api.exception.UnauthorizedException;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientResponseContext;
import javax.ws.rs.client.ClientResponseFilter;
import javax.ws.rs.core.MediaType;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;

/**
* This {@link ClientResponseFilter} implementation detects http status codes and throws {@link DockerException}s
Expand All @@ -41,7 +37,7 @@ public class ResponseStatusExceptionFilter implements ClientResponseFilter {

@Deprecated
public ResponseStatusExceptionFilter() {
this(DefaultDockerClientConfig.createDefaultConfigBuilder().build().getObjectMapper());
this(new ObjectMapper());
}

public ResponseStatusExceptionFilter(ObjectMapper objectMapper) {
Expand Down
@@ -1,6 +1,6 @@
package com.github.dockerjava.okhttp;

import com.github.dockerjava.core.DockerHttpClient;
import com.github.dockerjava.transport.DockerHttpClient;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
Expand Down