diff --git a/pom.xml b/pom.xml index 4d1689804..3bb280f25 100644 --- a/pom.xml +++ b/pom.xml @@ -50,13 +50,14 @@ 1.6.1 - 1.18 + 2.11 1.9 2.3.3 4.2.5 1.5 + 1.8 2.3 2.6 1.7.5 @@ -87,38 +88,21 @@ ${jackson-jaxrs.version} - com.sun.jersey - jersey-core - ${jersey.version} - - - com.sun.jersey - jersey-client + org.glassfish.jersey.connectors + jersey-jetty-connector ${jersey.version} - - com.sun.jersey.contribs - jersey-multipart - ${jersey.version} - - - com.sun.jersey.contribs - jersey-apache-client4 - ${jersey-apache-client4.version} - - - - org.apache.httpcomponents - httpclient - ${httpclient.version} - - org.apache.commons commons-compress ${commons-compress.version} + + commons-codec + commons-codec + ${commons-codec.version} + commons-lang commons-lang diff --git a/src/main/java/com/github/dockerjava/client/DockerClient.java b/src/main/java/com/github/dockerjava/client/DockerClient.java index f938edcef..7dee0cb4a 100644 --- a/src/main/java/com/github/dockerjava/client/DockerClient.java +++ b/src/main/java/com/github/dockerjava/client/DockerClient.java @@ -1,32 +1,21 @@ package com.github.dockerjava.client; -import static com.google.common.base.Preconditions.checkNotNull; -import static org.apache.commons.io.IOUtils.closeQuietly; - -import java.io.*; - +import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider; import com.github.dockerjava.client.command.*; - +import com.github.dockerjava.client.model.AuthConfig; +import com.github.dockerjava.client.utils.JsonClientFilter; import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator; -import org.apache.http.client.HttpClient; -import org.apache.http.conn.scheme.PlainSocketFactory; -import org.apache.http.conn.scheme.Scheme; -import org.apache.http.conn.scheme.SchemeRegistry; -import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.impl.client.DefaultHttpClient; -import org.apache.http.impl.conn.PoolingClientConnectionManager; +import org.glassfish.jersey.client.ClientConfig; +import org.glassfish.jersey.client.ClientProperties; -import com.github.dockerjava.client.model.AuthConfig; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; +import java.io.*; -import com.github.dockerjava.client.utils.JsonClientFilter; -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.api.client.config.ClientConfig; -import com.sun.jersey.api.client.config.DefaultClientConfig; -import com.sun.jersey.client.apache4.ApacheHttpClient4; -import com.sun.jersey.client.apache4.ApacheHttpClient4Handler; +import static com.google.common.base.Preconditions.checkNotNull; /** * @author Konstantin Pelykh (kpelykh@gmail.com) @@ -36,7 +25,7 @@ public class DockerClient implements Closeable { private final Client client; private final CommandFactory cmdFactory; - private final WebResource baseResource; + private final WebTarget baseResource; private final DockerClientConfig dockerClientConfig; public DockerClient() { @@ -61,43 +50,27 @@ public DockerClient(DockerClientConfig dockerClientConfig, CommandFactory cmdFac this.cmdFactory = cmdFactory; this.dockerClientConfig = dockerClientConfig; - HttpClient httpClient = getPoolingHttpClient(dockerClientConfig); - ClientConfig clientConfig = new DefaultClientConfig(); - client = new ApacheHttpClient4(new ApacheHttpClient4Handler(httpClient, - null, false), clientConfig); - - if(dockerClientConfig.getReadTimeout() != null) { - client.setReadTimeout(dockerClientConfig.getReadTimeout()); - } - - client.addFilter(new JsonClientFilter()); + ClientConfig clientConfig = new ClientConfig(); - if (dockerClientConfig.isLoggingFilterEnabled()) - client.addFilter(new SelectiveLoggingFilter()); + if (dockerClientConfig.getReadTimeout() != null) { + clientConfig.property(ClientProperties.READ_TIMEOUT, dockerClientConfig.getReadTimeout()); + } - WebResource webResource = client.resource(dockerClientConfig.getUri()); - - if(dockerClientConfig.getVersion() != null) { - baseResource = webResource.path("v" + dockerClientConfig.getVersion()); - } else { - baseResource = webResource; - } - } + clientConfig.register(JsonClientFilter.class); + clientConfig.register(JacksonJsonProvider.class); - private HttpClient getPoolingHttpClient(DockerClientConfig dockerClientConfig) { - SchemeRegistry schemeRegistry = new SchemeRegistry(); - schemeRegistry.register(new Scheme("http", dockerClientConfig.getUri().getPort(), - PlainSocketFactory.getSocketFactory())); - schemeRegistry.register(new Scheme("https", 443, SSLSocketFactory - .getSocketFactory())); + if (dockerClientConfig.isLoggingFilterEnabled()) { + clientConfig.register(SelectiveLoggingFilter.class); + } - PoolingClientConnectionManager cm = new PoolingClientConnectionManager(schemeRegistry); - // Increase max total connection - cm.setMaxTotal(1000); - // Increase default max connection per route - cm.setDefaultMaxPerRoute(1000); + client = ClientBuilder.newBuilder().withConfig(clientConfig).build(); + WebTarget webResource = client.target(dockerClientConfig.getUri()); - return new DefaultHttpClient(cm); + if (dockerClientConfig.getVersion() != null) { + baseResource = webResource.path("v" + dockerClientConfig.getVersion()); + } else { + baseResource = webResource; + } } public RES_T execute(AbstrDockerCmd command) @@ -105,7 +78,7 @@ public RES_T execute(AbstrDockerCmd command) return command.withBaseResource(baseResource).exec(); } - public AuthConfig authConfig() throws DockerException { + public AuthConfig authConfig() throws DockerException { checkNotNull(dockerClientConfig.getUsername(), "Configured username is null."); checkNotNull(dockerClientConfig.getPassword(), "Configured password is null."); checkNotNull(dockerClientConfig.getEmail(), "Configured email is null."); @@ -263,28 +236,29 @@ public TagImageCmd tagImageCmd(String imageId, String repository, String tag) { } // TODO This is only being used by the test code for logging. Is it really necessary? - /** - * @return The output slurped into a string. - */ - public static String asString(ClientResponse response) throws IOException { - - StringWriter out = new StringWriter(); - try { - LineIterator itr = IOUtils.lineIterator( - response.getEntityInputStream(), "UTF-8"); - while (itr.hasNext()) { - String line = itr.next(); - out.write(line + (itr.hasNext() ? "\n" : "")); - } - } finally { - closeQuietly(response.getEntityInputStream()); - } - return out.toString(); - } + + /** + * @return The output slurped into a string. + */ + public static String asString(Response response) throws IOException { + + StringWriter out = new StringWriter(); + InputStream is = response.readEntity(InputStream.class); + try { + LineIterator itr = IOUtils.lineIterator(is, "UTF-8"); + while (itr.hasNext()) { + String line = itr.next(); + out.write(line + (itr.hasNext() ? "\n" : "")); + } + } finally { + IOUtils.closeQuietly(is); + } + return out.toString(); + } @Override public void close() throws IOException { - client.destroy(); + client.close(); } } diff --git a/src/main/java/com/github/dockerjava/client/SelectiveLoggingFilter.java b/src/main/java/com/github/dockerjava/client/SelectiveLoggingFilter.java index fbdbfc7a2..b0f69ebb0 100644 --- a/src/main/java/com/github/dockerjava/client/SelectiveLoggingFilter.java +++ b/src/main/java/com/github/dockerjava/client/SelectiveLoggingFilter.java @@ -1,15 +1,15 @@ package com.github.dockerjava.client; +import java.io.IOException; import java.util.Set; +import javax.ws.rs.client.ClientRequestContext; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import com.google.common.collect.ImmutableSet; -import com.sun.jersey.api.client.ClientHandlerException; -import com.sun.jersey.api.client.ClientRequest; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.filter.LoggingFilter; + +import org.glassfish.jersey.filter.LoggingFilter; /** * A version of the logging filter that will avoid trying to log entities which can cause @@ -26,22 +26,13 @@ public class SelectiveLoggingFilter extends LoggingFilter { .build(); @Override - public ClientResponse handle(ClientRequest request) throws ClientHandlerException { + public void filter(ClientRequestContext context) throws IOException { // Unless the content type is in the list of those we want to ellide, then just have // our super-class handle things. - Object contentType = request.getHeaders().getFirst(HttpHeaders.CONTENT_TYPE); - if (contentType != null && SKIPPED_CONTENT.contains(contentType.toString())) { - // Skip logging this. - // - // N.B. -- I'd actually love to reproduce (or better yet just use) the logging code from - // our super-class. However, everything is private (so we can't use it) and the code - // is under a modified GPL which means we can't pull it into an ASL project. Right now - // I don't have the energy to do a clean implementation. - return getNext().handle(request); + Object contentType = context.getHeaders().getFirst(HttpHeaders.CONTENT_TYPE); + if (contentType == null || !SKIPPED_CONTENT.contains(contentType.toString())) { + super.filter(context); } - - // Do what we normally would - return super.handle(request); } } diff --git a/src/main/java/com/github/dockerjava/client/command/AbstrAuthCfgDockerCmd.java b/src/main/java/com/github/dockerjava/client/command/AbstrAuthCfgDockerCmd.java index 425df6156..37a3ffd1d 100644 --- a/src/main/java/com/github/dockerjava/client/command/AbstrAuthCfgDockerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/AbstrAuthCfgDockerCmd.java @@ -2,12 +2,11 @@ import java.io.IOException; -import org.apache.commons.codec.binary.Base64; - import com.fasterxml.jackson.databind.ObjectMapper; import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.model.AuthConfig; import com.google.common.base.Preconditions; +import org.apache.commons.codec.binary.Base64; public abstract class AbstrAuthCfgDockerCmd, RES_T> extends AbstrDockerCmd { diff --git a/src/main/java/com/github/dockerjava/client/command/AbstrDockerCmd.java b/src/main/java/com/github/dockerjava/client/command/AbstrDockerCmd.java index e5e2f2be0..48ed9a5e0 100644 --- a/src/main/java/com/github/dockerjava/client/command/AbstrDockerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/AbstrDockerCmd.java @@ -4,16 +4,17 @@ import org.slf4j.LoggerFactory; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.WebResource; + +import javax.ws.rs.client.WebTarget; public abstract class AbstrDockerCmd, RES_T> implements DockerCmd { private final static Logger LOGGER = LoggerFactory.getLogger(AbstrDockerCmd.class); - protected WebResource baseResource; + protected WebTarget baseResource; @SuppressWarnings("unchecked") - public T withBaseResource(WebResource baseResource) { + public T withBaseResource(WebTarget baseResource) { this.baseResource = baseResource; return (T)this; } diff --git a/src/main/java/com/github/dockerjava/client/command/AttachContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/AttachContainerCmd.java index 84b54c36c..1a4249510 100644 --- a/src/main/java/com/github/dockerjava/client/command/AttachContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/AttachContainerCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; @@ -9,10 +10,10 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.NotFoundException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.core.util.MultivaluedMapImpl; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; + +import static javax.ws.rs.client.Entity.entity; /** * Attach to container @@ -29,7 +30,7 @@ * - true or false, if true, print timestamps for every log line. * Defaults to false. */ -public class AttachContainerCmd extends AbstrDockerCmd { +public class AttachContainerCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory .getLogger(AttachContainerCmd.class); @@ -109,23 +110,20 @@ public AttachContainerCmd withLogs(boolean logs) { return this; } - protected ClientResponse impl() throws DockerException { - MultivaluedMap params = new MultivaluedMapImpl(); - params.add("logs", logs ? "1" : "0"); - params.add("timestamps", timestamps ? "1" : "0"); - params.add("stdout", stdout ? "1" : "0"); - params.add("stderr", stderr ? "1" : "0"); - params.add("follow", followStream ? "1" : "0"); - - WebResource webResource = baseResource.path( - String.format("/containers/%s/attach", containerId)) - .queryParams(params); + protected Response impl() throws DockerException { + WebTarget webResource = baseResource.path("/containers/{id}/attach") + .resolveTemplate("{id}", containerId) + .queryParam("logs", logs ? "1" : "0") + .queryParam("timestamps", timestamps ? "1" : "0") + .queryParam("stdout", stdout ? "1" : "0") + .queryParam("stderr", stderr ? "1" : "0") + .queryParam("follow", followStream ? "1" : "0"); try { LOGGER.trace("POST: {}", webResource); - return webResource.accept(MediaType.APPLICATION_OCTET_STREAM_TYPE) - .post(ClientResponse.class); - } catch (UniformInterfaceException exception) { + return webResource.request().accept(MediaType.APPLICATION_OCTET_STREAM_TYPE) + .post(entity(null, MediaType.APPLICATION_JSON), Response.class); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 400) { throw new DockerException("bad parameter"); } else if (exception.getResponse().getStatus() == 404) { diff --git a/src/main/java/com/github/dockerjava/client/command/AuthCmd.java b/src/main/java/com/github/dockerjava/client/command/AuthCmd.java index 85f681033..7333bf2d7 100644 --- a/src/main/java/com/github/dockerjava/client/command/AuthCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/AuthCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -7,8 +8,9 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.model.AuthConfig; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; + +import static javax.ws.rs.client.Entity.entity; /** * @@ -25,12 +27,11 @@ public AuthCmd(AuthConfig authConfig) { protected Void impl() throws DockerException { try { - WebResource webResource = baseResource.path("/auth"); + WebTarget webResource = baseResource.path("/auth"); LOGGER.trace("POST: {}", webResource); - webResource.header("Content-Type", MediaType.APPLICATION_JSON) - .accept(MediaType.APPLICATION_JSON).post(authConfig); + webResource.request().accept(MediaType.APPLICATION_JSON).post(entity(authConfig, MediaType.APPLICATION_JSON)); return null; - } catch (UniformInterfaceException e) { + } catch (ClientErrorException e) { throw new DockerException(e); } } diff --git a/src/main/java/com/github/dockerjava/client/command/BuildImgCmd.java b/src/main/java/com/github/dockerjava/client/command/BuildImgCmd.java index 34de8a8b7..65b6227c7 100644 --- a/src/main/java/com/github/dockerjava/client/command/BuildImgCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/BuildImgCmd.java @@ -13,6 +13,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; @@ -23,10 +24,10 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.utils.CompressArchiveUtil; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.core.util.MultivaluedMapImpl; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; + +import static javax.ws.rs.client.Entity.entity; /** * @@ -35,7 +36,7 @@ * TODO: http://docs.docker.com/reference/builder/#dockerignore * */ -public class BuildImgCmd extends AbstrDockerCmd { +public class BuildImgCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(BuildImgCmd.class); @@ -117,7 +118,7 @@ public String toString() { .toString(); } - protected ClientResponse impl() { + protected Response impl() { if (tarInputStream == null) { File dockerFolderTar = buildDockerFolderTar(); try { @@ -132,28 +133,27 @@ protected ClientResponse impl() { } } - protected ClientResponse callDocker(final InputStream dockerFolderTarInputStream) { - MultivaluedMap params = new MultivaluedMapImpl(); - params.add("t", tag); - if (noCache) { - params.add("nocache", "true"); - } - if (remove) { - params.add("rm", "true"); - } + protected Response callDocker(final InputStream dockerFolderTarInputStream) { + + WebTarget webResource = baseResource.path("/build") + .queryParam("t", tag); + if (noCache) { + webResource = webResource.queryParam("nocache", "true"); + } + if (remove) { + webResource = webResource.queryParam("rm", "true"); + } if (quiet) { - params.add("q", "true"); + webResource = webResource.queryParam("q", "true"); } - WebResource webResource = baseResource.path("/build").queryParams(params); - try { LOGGER.trace("POST: {}", webResource); return webResource - .type("application/tar") + .request() .accept(MediaType.TEXT_PLAIN) - .post(ClientResponse.class, dockerFolderTarInputStream); - } catch (UniformInterfaceException exception) { + .post(entity(dockerFolderTarInputStream, "application/tar"), Response.class); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 500) { throw new DockerException("Server error", exception); } else { diff --git a/src/main/java/com/github/dockerjava/client/command/CommitCmd.java b/src/main/java/com/github/dockerjava/client/command/CommitCmd.java index 37b2e1eca..dea567929 100644 --- a/src/main/java/com/github/dockerjava/client/command/CommitCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/CommitCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; @@ -15,9 +16,9 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.NotFoundException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.core.util.MultivaluedMapImpl; +import javax.ws.rs.client.WebTarget; + +import static javax.ws.rs.client.Entity.entity; /** * @@ -319,21 +320,20 @@ public String toString() { } protected String impl() throws DockerException { - MultivaluedMap params = new MultivaluedMapImpl(); - params.add("container", containerId); - params.add("repo", repository); - params.add("tag", tag); - params.add("m", message); - params.add("author", author); - params.add("pause", pause ? "1" : "0"); - WebResource webResource = baseResource.path("/commit").queryParams(params); + WebTarget webResource = baseResource.path("/commit") + .queryParam("container", containerId) + .queryParam("repo", repository) + .queryParam("tag", tag) + .queryParam("m", message) + .queryParam("author", author) + .queryParam("pause", pause ? "1" : "0"); try { LOGGER.trace("POST: {}", webResource); - ObjectNode objectNode = webResource.queryParams(params).accept("application/vnd.docker.raw-stream").type(MediaType.APPLICATION_JSON).post(ObjectNode.class, this); + ObjectNode objectNode = webResource.request().accept("application/vnd.docker.raw-stream").post(entity(this, MediaType.APPLICATION_JSON), ObjectNode.class); return objectNode.get("Id").asText(); - } catch (UniformInterfaceException exception) { + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 404) { throw new NotFoundException(String.format("No such container %s", containerId)); } else if (exception.getResponse().getStatus() == 500) { diff --git a/src/main/java/com/github/dockerjava/client/command/ContainerDiffCmd.java b/src/main/java/com/github/dockerjava/client/command/ContainerDiffCmd.java index 8c16e6008..e5d7df41b 100644 --- a/src/main/java/com/github/dockerjava/client/command/ContainerDiffCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/ContainerDiffCmd.java @@ -2,6 +2,9 @@ import java.util.List; +import javax.ws.rs.ClientErrorException; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -11,9 +14,6 @@ import com.github.dockerjava.client.NotFoundException; import com.github.dockerjava.client.model.ChangeLog; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.GenericType; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; /** * Inspect changes on a container's filesystem @@ -49,13 +49,13 @@ public String toString() { } protected List impl() throws DockerException { - WebResource webResource = baseResource.path(String.format("/containers/%s/changes", containerId)); + WebTarget webResource = baseResource.path("/containers/{id}/changes").resolveTemplate("id", containerId); try { LOGGER.trace("GET: {}", webResource); - return webResource.accept(MediaType.APPLICATION_JSON).get(new GenericType>() { - }); - } catch (UniformInterfaceException exception) { + return webResource.request().accept(MediaType.APPLICATION_JSON).get(new GenericType>() { + }); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 404) { throw new NotFoundException(String.format("No such container %s", containerId)); } else if (exception.getResponse().getStatus() == 500) { diff --git a/src/main/java/com/github/dockerjava/client/command/CopyFileFromContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/CopyFileFromContainerCmd.java index c95239275..2edc6a21d 100644 --- a/src/main/java/com/github/dockerjava/client/command/CopyFileFromContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/CopyFileFromContainerCmd.java @@ -1,5 +1,7 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; +import javax.ws.rs.client.Invocation; import javax.ws.rs.core.MediaType; import com.fasterxml.jackson.annotation.JsonProperty; @@ -9,16 +11,17 @@ import com.github.dockerjava.client.DockerException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; + +import static javax.ws.rs.client.Entity.entity; /** * * Copy files or folders from a container. * */ -public class CopyFileFromContainerCmd extends AbstrDockerCmd { +public class CopyFileFromContainerCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(CopyFileFromContainerCmd.class); @@ -74,18 +77,18 @@ public String toString() { .toString(); } - protected ClientResponse impl() throws DockerException { + protected Response impl() throws DockerException { - WebResource webResource = - baseResource.path(String.format("/containers/%s/copy", containerId)); + WebTarget webResource = + baseResource.path("/containers/{id}/copy").resolveTemplate("id", containerId); try { LOGGER.trace("POST: " + webResource.toString()); - WebResource.Builder builder = - webResource.accept(MediaType.APPLICATION_OCTET_STREAM_TYPE).type("application/json"); + Invocation.Builder builder = + webResource.request().accept(MediaType.APPLICATION_OCTET_STREAM_TYPE); - return builder.post(ClientResponse.class, this); - } catch (UniformInterfaceException exception) { + return builder.post(entity(this, MediaType.APPLICATION_JSON), Response.class); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 400) { throw new DockerException("bad parameter"); } else if (exception.getResponse().getStatus() == 404) { diff --git a/src/main/java/com/github/dockerjava/client/command/CreateContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/CreateContainerCmd.java index 45bec8122..b8f39a342 100644 --- a/src/main/java/com/github/dockerjava/client/command/CreateContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/CreateContainerCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; @@ -13,9 +14,9 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.NotFoundException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.core.util.MultivaluedMapImpl; +import javax.ws.rs.client.WebTarget; + +import static javax.ws.rs.client.Entity.entity; /** @@ -259,18 +260,17 @@ public String toString() { } protected CreateContainerResponse impl() { - MultivaluedMap params = new MultivaluedMapImpl(); - if (name != null) { - params.add("name", name); - } - WebResource webResource = baseResource.path("/containers/create").queryParams(params); + WebTarget webResource = baseResource.path("/containers/create"); + + if (name != null) { + webResource = webResource.queryParam("name", name); + } try { LOGGER.trace("POST: {} ", webResource); - return webResource.accept(MediaType.APPLICATION_JSON) - .type(MediaType.APPLICATION_JSON) - .post(CreateContainerResponse.class, this); - } catch (UniformInterfaceException exception) { + return webResource.request().accept(MediaType.APPLICATION_JSON) + .post(entity(this, MediaType.APPLICATION_JSON), CreateContainerResponse.class); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 404) { throw new NotFoundException(String.format("%s is an unrecognized image. Please pull the image first.", getImage())); } else if (exception.getResponse().getStatus() == 406) { diff --git a/src/main/java/com/github/dockerjava/client/command/CreateImageCmd.java b/src/main/java/com/github/dockerjava/client/command/CreateImageCmd.java index 776cf94fd..4d34db8e9 100644 --- a/src/main/java/com/github/dockerjava/client/command/CreateImageCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/CreateImageCmd.java @@ -2,6 +2,7 @@ import java.io.InputStream; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; @@ -11,9 +12,9 @@ import com.github.dockerjava.client.DockerException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.core.util.MultivaluedMapImpl; +import javax.ws.rs.client.WebTarget; + +import static javax.ws.rs.client.Entity.entity; /** * Create an image by importing the given stream of a tar file. @@ -79,19 +80,19 @@ public String toString() { } protected CreateImageResponse impl() { - MultivaluedMap params = new MultivaluedMapImpl(); - params.add("repo", repository); - params.add("tag", tag); - params.add("fromSrc", "-"); - WebResource webResource = baseResource.path("/images/create").queryParams(params); + WebTarget webResource = baseResource + .path("/images/create") + .queryParam("repo", repository) + .queryParam("tag", tag) + .queryParam("fromSrc", "-"); try { LOGGER.trace("POST: {}", webResource); - return webResource.accept(MediaType.APPLICATION_OCTET_STREAM_TYPE) - .post(CreateImageResponse.class, imageStream); + return webResource.request().accept(MediaType.APPLICATION_OCTET_STREAM_TYPE) + .post(entity(imageStream, MediaType.APPLICATION_OCTET_STREAM), CreateImageResponse.class); - } catch (UniformInterfaceException exception) { + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 500) { throw new DockerException("Server error.", exception); } else { diff --git a/src/main/java/com/github/dockerjava/client/command/InfoCmd.java b/src/main/java/com/github/dockerjava/client/command/InfoCmd.java index 42985e632..db5033798 100644 --- a/src/main/java/com/github/dockerjava/client/command/InfoCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/InfoCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -7,8 +8,7 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.model.Info; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; /** @@ -24,12 +24,12 @@ public String toString() { } protected Info impl() throws DockerException { - WebResource webResource = baseResource.path("/info"); + WebTarget webResource = baseResource.path("/info"); try { LOGGER.trace("GET: {}", webResource); - return webResource.accept(MediaType.APPLICATION_JSON).get(Info.class); - } catch (UniformInterfaceException exception) { + return webResource.request().accept(MediaType.APPLICATION_JSON).get(Info.class); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 500) { throw new DockerException("Server error.", exception); } else { diff --git a/src/main/java/com/github/dockerjava/client/command/InspectContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/InspectContainerCmd.java index 78967e2d3..e08b4eaa7 100644 --- a/src/main/java/com/github/dockerjava/client/command/InspectContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/InspectContainerCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -8,8 +9,7 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.NotFoundException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; /** * Inspect the details of a container. @@ -40,12 +40,12 @@ public String toString() { } protected InspectContainerResponse impl() throws DockerException { - WebResource webResource = baseResource.path(String.format("/containers/%s/json", containerId)); + WebTarget webResource = baseResource.path("/containers/{id}/json").resolveTemplate("id", containerId); try { LOGGER.trace("GET: {}", webResource); - return webResource.accept(MediaType.APPLICATION_JSON).get(InspectContainerResponse.class); - } catch (UniformInterfaceException exception) { + return webResource.request().accept(MediaType.APPLICATION_JSON).get(InspectContainerResponse.class); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 404) { throw new NotFoundException(String.format("No such container %s", containerId)); } else if (exception.getResponse().getStatus() == 500) { diff --git a/src/main/java/com/github/dockerjava/client/command/InspectImageCmd.java b/src/main/java/com/github/dockerjava/client/command/InspectImageCmd.java index 0343dc82e..f334b866e 100644 --- a/src/main/java/com/github/dockerjava/client/command/InspectImageCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/InspectImageCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -8,8 +9,7 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.NotFoundException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; /** @@ -41,12 +41,12 @@ public String toString() { } protected InspectImageResponse impl() { - WebResource webResource = baseResource.path(String.format("/images/%s/json", imageId)); + WebTarget webResource = baseResource.path("/images/{id}/json").resolveTemplate("id", imageId); try { LOGGER.trace("GET: {}", webResource); - return webResource.accept(MediaType.APPLICATION_JSON).get(InspectImageResponse.class); - } catch (UniformInterfaceException exception) { + return webResource.request().accept(MediaType.APPLICATION_JSON).get(InspectImageResponse.class); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 404) { throw new NotFoundException(String.format("No such image %s", imageId)); } else if (exception.getResponse().getStatus() == 500) { diff --git a/src/main/java/com/github/dockerjava/client/command/KillContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/KillContainerCmd.java index 9f9cc6a59..fca7b310a 100644 --- a/src/main/java/com/github/dockerjava/client/command/KillContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/KillContainerCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -7,8 +8,9 @@ import com.github.dockerjava.client.DockerException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; + +import static javax.ws.rs.client.Entity.entity; /** * Kill a running container. @@ -49,7 +51,7 @@ public String toString() { } protected Void impl() throws DockerException { - WebResource webResource = baseResource.path(String.format("/containers/%s/kill", containerId)); + WebTarget webResource = baseResource.path("/containers/{id}/kill").resolveTemplate("id", containerId); if(signal != null) { webResource = webResource.queryParam("signal", signal); @@ -57,8 +59,8 @@ protected Void impl() throws DockerException { try { LOGGER.trace("POST: {}", webResource); - webResource.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).post(); - } catch (UniformInterfaceException exception) { + webResource.request().accept(MediaType.APPLICATION_JSON).post(entity(null, MediaType.APPLICATION_JSON)); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 404) { LOGGER.warn("No such container {}", containerId); } else if (exception.getResponse().getStatus() == 204) { diff --git a/src/main/java/com/github/dockerjava/client/command/ListContainersCmd.java b/src/main/java/com/github/dockerjava/client/command/ListContainersCmd.java index 226e16805..e6ea3b5fc 100644 --- a/src/main/java/com/github/dockerjava/client/command/ListContainersCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/ListContainersCmd.java @@ -2,6 +2,7 @@ import java.util.List; +import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; @@ -10,9 +11,7 @@ import com.github.dockerjava.client.model.Container; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.GenericType; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.core.util.MultivaluedMapImpl; +import javax.ws.rs.client.WebTarget; /** @@ -93,19 +92,19 @@ public String toString() { } protected List impl() { - MultivaluedMap params = new MultivaluedMapImpl(); - if(limit >= 0) { - params.add("limit", String.valueOf(limit)); - } - params.add("all", showAll ? "1" : "0"); - params.add("since", sinceId); - params.add("before", beforeId); - params.add("size", showSize ? "1" : "0"); - - WebResource webResource = baseResource.path("/containers/json").queryParams(params); + WebTarget webResource = baseResource.path("/containers/json") + .queryParam("all", showAll ? "1" : "0") + .queryParam("since", sinceId) + .queryParam("before", beforeId) + .queryParam("size", showSize ? "1" : "0"); + + if (limit >= 0) { + webResource = webResource.queryParam("limit", String.valueOf(limit)); + } + LOGGER.trace("GET: {}", webResource); - List containers = webResource.accept(MediaType.APPLICATION_JSON).get(new GenericType>() { - }); + List containers = webResource.request().accept(MediaType.APPLICATION_JSON).get(new GenericType>() { + }); LOGGER.trace("Response: {}", containers); return containers; diff --git a/src/main/java/com/github/dockerjava/client/command/ListImagesCmd.java b/src/main/java/com/github/dockerjava/client/command/ListImagesCmd.java index 27af8ed9a..7cf55b3fa 100644 --- a/src/main/java/com/github/dockerjava/client/command/ListImagesCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/ListImagesCmd.java @@ -2,6 +2,8 @@ import java.util.List; +import javax.ws.rs.ClientErrorException; +import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; @@ -11,10 +13,7 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.model.Image; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.GenericType; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.core.util.MultivaluedMapImpl; +import javax.ws.rs.client.WebTarget; /** @@ -58,19 +57,18 @@ public String toString() { } protected List impl() { - MultivaluedMap params = new MultivaluedMapImpl(); - params.add("filter", filter); - params.add("all", showAll ? "1" : "0"); - - WebResource webResource = baseResource.path("/images/json").queryParams(params); + WebTarget webResource = baseResource + .path("/images/json") + .queryParam("filter", filter) + .queryParam("all", showAll ? "1" : "0"); try { LOGGER.trace("GET: {}", webResource); - List images = webResource.accept(MediaType.APPLICATION_JSON).get(new GenericType>() { + List images = webResource.request().accept(MediaType.APPLICATION_JSON).get(new GenericType>() { }); LOGGER.trace("Response: {}", images); return images; - } catch (UniformInterfaceException exception) { + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 400) { throw new DockerException("bad parameter"); } else if (exception.getResponse().getStatus() == 500) { diff --git a/src/main/java/com/github/dockerjava/client/command/LogContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/LogContainerCmd.java index f1feb73a8..0e9f29a68 100644 --- a/src/main/java/com/github/dockerjava/client/command/LogContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/LogContainerCmd.java @@ -1,18 +1,18 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; +import org.omg.PortableInterceptor.ClientRequestInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.NotFoundException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.core.util.MultivaluedMapImpl; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; /** * Get container logs @@ -29,7 +29,7 @@ * @param tail * - `all` or ``, Output specified number of lines at the end of logs */ -public class LogContainerCmd extends AbstrDockerCmd { +public class LogContainerCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory .getLogger(LogContainerCmd.class); @@ -126,23 +126,22 @@ public String toString() { .toString(); } - protected ClientResponse impl() throws DockerException { - MultivaluedMap params = new MultivaluedMapImpl(); - params.add("timestamps", timestamps ? "1" : "0"); - params.add("stdout", stdout ? "1" : "0"); - params.add("stderr", stderr ? "1" : "0"); - params.add("follow", followStream ? "1" : "0"); - params.add("tail", tail < 0 ? "all" : ""+ tail); + protected Response impl() throws DockerException { - WebResource webResource = baseResource.path( - String.format("/containers/%s/logs", containerId)) - .queryParams(params); + WebTarget webResource = + baseResource.path("/containers/{id}/logs") + .resolveTemplate("id", containerId) + .queryParam("timestamps", timestamps ? "1" : "0") + .queryParam("stdout", stdout ? "1" : "0") + .queryParam("stderr", stderr ? "1" : "0") + .queryParam("follow", followStream ? "1" : "0") + .queryParam("tail", tail < 0 ? "all" : "" + tail); try { LOGGER.trace("GET: {}", webResource); - return webResource.accept(MediaType.APPLICATION_OCTET_STREAM_TYPE) - .get(ClientResponse.class); - } catch (UniformInterfaceException exception) { + return webResource.request().accept(MediaType.APPLICATION_OCTET_STREAM_TYPE) + .get(Response.class); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 400) { throw new DockerException("bad parameter"); } else if (exception.getResponse().getStatus() == 404) { diff --git a/src/main/java/com/github/dockerjava/client/command/PauseContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/PauseContainerCmd.java index a45083697..869528661 100644 --- a/src/main/java/com/github/dockerjava/client/command/PauseContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/PauseContainerCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -7,9 +8,10 @@ import com.github.dockerjava.client.DockerException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; + +import static javax.ws.rs.client.Entity.entity; /** * Pause a container. @@ -45,14 +47,14 @@ public String toString() { } protected Integer impl() throws DockerException { - WebResource webResource = baseResource.path(String.format("/containers/%s/pause", containerId)); + WebTarget webResource = baseResource.path("/containers/{id}/pause").resolveTemplate("id", containerId); - ClientResponse response = null; + Response response = null; try { LOGGER.trace("POST: {}", webResource); - response = webResource.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).post(ClientResponse.class); - } catch (UniformInterfaceException exception) { + response = webResource.request().accept(MediaType.APPLICATION_JSON).post(entity(null, MediaType.APPLICATION_JSON), Response.class); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 404) { LOGGER.warn("No such container {}", containerId); } else if (exception.getResponse().getStatus() == 204) { diff --git a/src/main/java/com/github/dockerjava/client/command/PingCmd.java b/src/main/java/com/github/dockerjava/client/command/PingCmd.java index e017617a5..ebbaf49b1 100644 --- a/src/main/java/com/github/dockerjava/client/command/PingCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/PingCmd.java @@ -3,9 +3,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.ClientErrorException; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; /** * Ping the Docker server @@ -16,13 +16,13 @@ public class PingCmd extends AbstrDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(PingCmd.class); protected Integer impl() { - WebResource webResource = baseResource.path("/_ping"); + WebTarget webResource = baseResource.path("/_ping"); try { LOGGER.trace("GET: {}", webResource); - ClientResponse resp = webResource.get(ClientResponse.class); + Response resp = webResource.request().get(Response.class); return resp.getStatus(); - } catch (UniformInterfaceException exception) { + } catch (ClientErrorException exception) { return exception.getResponse().getStatus(); } } diff --git a/src/main/java/com/github/dockerjava/client/command/PullImageCmd.java b/src/main/java/com/github/dockerjava/client/command/PullImageCmd.java index c6fa460e0..d236c2700 100644 --- a/src/main/java/com/github/dockerjava/client/command/PullImageCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/PullImageCmd.java @@ -1,34 +1,30 @@ package com.github.dockerjava.client.command; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; - -import org.apache.commons.lang.StringUtils; +import com.github.dockerjava.client.DockerException; +import com.google.common.base.Preconditions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.github.dockerjava.client.DockerException; -import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.core.util.MultivaluedMapImpl; +import javax.ws.rs.ClientErrorException; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import static javax.ws.rs.client.Entity.entity; /** - * * Pull image from repository. - * */ -public class PullImageCmd extends AbstrDockerCmd { +public class PullImageCmd extends AbstrDockerCmd { - private static final Logger LOGGER = LoggerFactory.getLogger(PullImageCmd.class); + private static final Logger LOGGER = LoggerFactory.getLogger(PullImageCmd.class); - private String repository, tag, registry; + private String repository, tag, registry; - public PullImageCmd(String repository) { - withRepository(repository); - } + public PullImageCmd(String repository) { + withRepository(repository); + } public String getRepository() { return repository; @@ -43,50 +39,49 @@ public String getRegistry() { } public PullImageCmd withRepository(String repository) { - Preconditions.checkNotNull(repository, "repository was not specified"); - this.repository = repository; - return this; - } - - public PullImageCmd withTag(String tag) { - Preconditions.checkNotNull(tag, "tag was not specified"); - this.tag = tag; - return this; - } - - public PullImageCmd withRegistry(String registry) { - Preconditions.checkNotNull(registry, "registry was not specified"); - this.registry = registry; - return this; - } + Preconditions.checkNotNull(repository, "repository was not specified"); + this.repository = repository; + return this; + } + + public PullImageCmd withTag(String tag) { + Preconditions.checkNotNull(tag, "tag was not specified"); + this.tag = tag; + return this; + } + + public PullImageCmd withRegistry(String registry) { + Preconditions.checkNotNull(registry, "registry was not specified"); + this.registry = registry; + return this; + } @Override public String toString() { return new StringBuilder("pull ") - .append(repository) - .append(tag != null ? ":" + tag : "") - .toString(); + .append(repository) + .append(tag != null ? ":" + tag : "") + .toString(); } - protected ClientResponse impl() { - Preconditions.checkNotNull(repository, "Repository was not specified"); - - MultivaluedMap params = new MultivaluedMapImpl(); - params.add("tag", tag); - params.add("fromImage", repository); - params.add("registry", registry); - - WebResource webResource = baseResource.path("/images/create").queryParams(params); - - try { - LOGGER.trace("POST: {}", webResource); - return webResource.accept(MediaType.APPLICATION_OCTET_STREAM_TYPE).post(ClientResponse.class); - } catch (UniformInterfaceException exception) { - if (exception.getResponse().getStatus() == 500) { - throw new DockerException("Server error.", exception); - } else { - throw new DockerException(exception); - } - } - } + protected Response impl() { + Preconditions.checkNotNull(repository, "Repository was not specified"); + + WebTarget webResource = baseResource + .path("/images/create") + .queryParam("tag", tag) + .queryParam("fromImage", repository) + .queryParam("registry", registry); + + try { + LOGGER.trace("POST: {}", webResource); + return webResource.request().accept(MediaType.APPLICATION_OCTET_STREAM_TYPE).post(entity(Response.class, MediaType.APPLICATION_JSON)); + } catch (ClientErrorException exception) { + if (exception.getResponse().getStatus() == 500) { + throw new DockerException("Server error.", exception); + } else { + throw new DockerException(exception); + } + } + } } diff --git a/src/main/java/com/github/dockerjava/client/command/PushImageCmd.java b/src/main/java/com/github/dockerjava/client/command/PushImageCmd.java index 41cdc077a..20156068e 100644 --- a/src/main/java/com/github/dockerjava/client/command/PushImageCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/PushImageCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -7,9 +8,10 @@ import com.github.dockerjava.client.DockerException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; + +import static javax.ws.rs.client.Entity.entity; /** @@ -17,7 +19,7 @@ * * @param name The name, e.g. "alexec/busybox" or just "busybox" if you want to default. Not null. */ -public class PushImageCmd extends AbstrAuthCfgDockerCmd { +public class PushImageCmd extends AbstrAuthCfgDockerCmd { private static final Logger LOGGER = LoggerFactory.getLogger(PushImageCmd.class); @@ -47,16 +49,17 @@ public String toString() { .toString(); } - protected ClientResponse impl() { - WebResource webResource = baseResource.path("/images/" + name(name) + "/push"); + protected Response impl() { + WebTarget webResource = baseResource.path("/images/" + name(name) + "/push"); try { final String registryAuth = registryAuth(); LOGGER.trace("POST: {}", webResource); return webResource + .request() .header("X-Registry-Auth", registryAuth) .accept(MediaType.APPLICATION_JSON) - .post(ClientResponse.class); - } catch (UniformInterfaceException e) { + .post(entity(Response.class, MediaType.APPLICATION_JSON)); + } catch (ClientErrorException e) { throw new DockerException(e); } } diff --git a/src/main/java/com/github/dockerjava/client/command/RemoveContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/RemoveContainerCmd.java index 3a12cd8e7..33a634ecc 100644 --- a/src/main/java/com/github/dockerjava/client/command/RemoveContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/RemoveContainerCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import org.apache.commons.lang.StringUtils; @@ -8,8 +9,7 @@ import com.github.dockerjava.client.DockerException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; /** * Remove a container. @@ -73,13 +73,13 @@ public String toString() { protected Void impl() throws DockerException { Preconditions.checkState(!StringUtils.isEmpty(containerId), "Container ID can't be empty"); - WebResource webResource = baseResource.path("/containers/" + containerId).queryParam("v", removeVolumes ? "1" : "0").queryParam("force", force ? "1" : "0"); + WebTarget webResource = baseResource.path("/containers/" + containerId).queryParam("v", removeVolumes ? "1" : "0").queryParam("force", force ? "1" : "0"); try { LOGGER.trace("DELETE: {}", webResource); - String response = webResource.accept(MediaType.APPLICATION_JSON).delete(String.class); + String response = webResource.request().accept(MediaType.APPLICATION_JSON).delete(String.class); LOGGER.trace("Response: {}", response); - } catch (UniformInterfaceException exception) { + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 204) { //no error LOGGER.trace("Successfully removed container " + containerId); diff --git a/src/main/java/com/github/dockerjava/client/command/RemoveImageCmd.java b/src/main/java/com/github/dockerjava/client/command/RemoveImageCmd.java index 49707d51e..1143919c6 100644 --- a/src/main/java/com/github/dockerjava/client/command/RemoveImageCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/RemoveImageCmd.java @@ -6,9 +6,10 @@ import com.github.dockerjava.client.DockerException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; + +import javax.ws.rs.ClientErrorException; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; /** * @@ -72,14 +73,14 @@ protected Void impl() throws DockerException { Preconditions.checkState(!StringUtils.isEmpty(imageId), "Image ID can't be empty"); try { - WebResource webResource = baseResource.path("/images/" + imageId) + WebTarget webResource = baseResource.path("/images/" + imageId) .queryParam("force", force ? "1" : "0").queryParam("noprune", noPrune ? "1" : "0"); LOGGER.trace("DELETE: {}", webResource); - webResource.delete(ClientResponse.class); + webResource.request().delete(Response.class); - } catch (UniformInterfaceException exception) { + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 204) { //no error LOGGER.trace("Successfully removed image " + imageId); diff --git a/src/main/java/com/github/dockerjava/client/command/RestartContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/RestartContainerCmd.java index 8a383af2e..2f8c9f869 100644 --- a/src/main/java/com/github/dockerjava/client/command/RestartContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/RestartContainerCmd.java @@ -1,5 +1,7 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; +import javax.ws.rs.client.Entity; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -8,8 +10,9 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.NotFoundException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; + +import static javax.ws.rs.client.Entity.entity; /** * Restart a running container. @@ -58,13 +61,13 @@ public String toString() { } protected Void impl() throws DockerException { - WebResource webResource = baseResource.path(String.format("/containers/%s/restart", containerId)) - .queryParam("t", String.valueOf(timeout));; + WebTarget webResource = baseResource.path("/containers/{id}/restart").resolveTemplate("id", containerId) + .queryParam("t", String.valueOf(timeout)); try { LOGGER.trace("POST: {}", webResource); - webResource.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).post(); - } catch (UniformInterfaceException exception) { + webResource.request().accept(MediaType.APPLICATION_JSON).post(entity(null, MediaType.APPLICATION_JSON_TYPE)); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 404) { throw new NotFoundException(String.format("No such container %s", containerId)); } else if (exception.getResponse().getStatus() == 204) { diff --git a/src/main/java/com/github/dockerjava/client/command/SearchImagesCmd.java b/src/main/java/com/github/dockerjava/client/command/SearchImagesCmd.java index 6be296068..7d0bca70d 100644 --- a/src/main/java/com/github/dockerjava/client/command/SearchImagesCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/SearchImagesCmd.java @@ -2,6 +2,8 @@ import java.util.List; +import javax.ws.rs.ClientErrorException; +import javax.ws.rs.core.GenericType; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -10,9 +12,7 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.model.SearchItem; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.GenericType; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; /** @@ -48,12 +48,12 @@ public String toString() { } protected List impl() { - WebResource webResource = baseResource.path("/images/search").queryParam("term", term); + WebTarget webResource = baseResource.path("/images/search").queryParam("term", term); try { LOGGER.trace("GET: {}", webResource); - return webResource.accept(MediaType.APPLICATION_JSON).get(new GenericType>() { - }); - } catch (UniformInterfaceException exception) { + return webResource.request().accept(MediaType.APPLICATION_JSON).get(new GenericType>() { + }); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 500) { throw new DockerException("Server error.", exception); } else { diff --git a/src/main/java/com/github/dockerjava/client/command/StartContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/StartContainerCmd.java index b116d8da7..1b2534e6d 100644 --- a/src/main/java/com/github/dockerjava/client/command/StartContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/StartContainerCmd.java @@ -1,5 +1,7 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; +import javax.ws.rs.client.Invocation; import javax.ws.rs.core.MediaType; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -12,9 +14,9 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.NotFoundException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.api.client.WebResource.Builder; +import javax.ws.rs.client.WebTarget; + +import static javax.ws.rs.client.Entity.entity; /** * Run a container @@ -156,16 +158,16 @@ public String toString() { } protected Void impl() throws DockerException { - WebResource webResource = baseResource.path(String.format( - "/containers/%s/start", containerId)); + WebTarget webResource = baseResource.path( + "/containers/{id}/start").resolveTemplate("id", containerId); try { LOGGER.trace("POST: {}", webResource); - Builder builder = webResource.accept(MediaType.APPLICATION_JSON); + Invocation.Builder builder = webResource.request().accept(MediaType.APPLICATION_JSON); - builder.type(MediaType.APPLICATION_JSON).post(this); + builder.post(entity(this, MediaType.APPLICATION_JSON)); - } catch (UniformInterfaceException exception) { + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 404) { throw new NotFoundException(String.format( "No such container %s", containerId)); diff --git a/src/main/java/com/github/dockerjava/client/command/StopContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/StopContainerCmd.java index 69f453914..7bb0699dc 100644 --- a/src/main/java/com/github/dockerjava/client/command/StopContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/StopContainerCmd.java @@ -1,5 +1,7 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; +import javax.ws.rs.client.Entity; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -7,8 +9,9 @@ import com.github.dockerjava.client.DockerException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; + +import static javax.ws.rs.client.Entity.entity; /** * Stop a running container. @@ -58,13 +61,13 @@ public String toString() { } protected Void impl() throws DockerException { - WebResource webResource = baseResource.path(String.format("/containers/%s/stop", containerId)) + WebTarget webResource = baseResource.path("/containers/{id}/stop").resolveTemplate("id", containerId) .queryParam("t", String.valueOf(timeout)); try { LOGGER.trace("POST: {}", webResource); - webResource.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).post(); - } catch (UniformInterfaceException exception) { + webResource.request().accept(MediaType.APPLICATION_JSON).post(entity(null, MediaType.APPLICATION_JSON)); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 404) { LOGGER.warn("No such container {}", containerId); } else if(exception.getResponse().getStatus() == 304) { diff --git a/src/main/java/com/github/dockerjava/client/command/TagImageCmd.java b/src/main/java/com/github/dockerjava/client/command/TagImageCmd.java index 8b1f281c2..e24f499d8 100644 --- a/src/main/java/com/github/dockerjava/client/command/TagImageCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/TagImageCmd.java @@ -1,5 +1,7 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import org.slf4j.Logger; @@ -7,10 +9,10 @@ import com.github.dockerjava.client.DockerException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.core.util.MultivaluedMapImpl; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; + +import static javax.ws.rs.client.Entity.entity; /** @@ -92,20 +94,16 @@ public String toString() { } protected Integer impl() { - - MultivaluedMap params = new MultivaluedMapImpl(); - params.add("repo", repository); - params.add("tag", tag); - params.add("force", force ? "1" : "0"); - - WebResource webResource = baseResource.path("/images/" + imageId + "/tag").queryParams( - params); + WebTarget webResource = baseResource.path("/images/" + imageId + "/tag") + .queryParam("repo", repository) + .queryParam("tag", tag) + .queryParam("force", force ? "1" : "0"); try { LOGGER.trace("POST: {}", webResource); - ClientResponse resp = webResource.post(ClientResponse.class); + Response resp = webResource.request().post(entity(null, MediaType.APPLICATION_JSON), Response.class); return resp.getStatus(); - } catch (UniformInterfaceException exception) { + } catch (ClientErrorException exception) { throw new DockerException(exception); } } diff --git a/src/main/java/com/github/dockerjava/client/command/TopContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/TopContainerCmd.java index fde5f54eb..ec0c108bf 100644 --- a/src/main/java/com/github/dockerjava/client/command/TopContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/TopContainerCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import org.apache.commons.lang.StringUtils; @@ -9,8 +10,7 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.NotFoundException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; /** * @@ -59,15 +59,15 @@ public String toString() { } protected TopContainerResponse impl() throws DockerException { - WebResource webResource = baseResource.path(String.format("/containers/%s/top", containerId)); + WebTarget webResource = baseResource.path("/containers/{id}/top").resolveTemplate("id", containerId); if(!StringUtils.isEmpty(psArgs)) webResource = webResource.queryParam("ps_args", psArgs); try { LOGGER.trace("GET: {}", webResource); - return webResource.accept(MediaType.APPLICATION_JSON).get(TopContainerResponse.class); - } catch (UniformInterfaceException exception) { + return webResource.request().accept(MediaType.APPLICATION_JSON).get(TopContainerResponse.class); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 404) { throw new NotFoundException(String.format("No such container %s", containerId)); } else if (exception.getResponse().getStatus() == 500) { diff --git a/src/main/java/com/github/dockerjava/client/command/UnpauseContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/UnpauseContainerCmd.java index 9e75540c2..2b3488055 100644 --- a/src/main/java/com/github/dockerjava/client/command/UnpauseContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/UnpauseContainerCmd.java @@ -1,5 +1,7 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; +import javax.ws.rs.client.Entity; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -7,9 +9,8 @@ import com.github.dockerjava.client.DockerException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.Response; /** * Unpause a container. @@ -45,14 +46,14 @@ public String toString() { } protected Integer impl() throws DockerException { - WebResource webResource = baseResource.path(String.format("/containers/%s/unpause", containerId)); + WebTarget webResource = baseResource.path("/containers/{id}/unpause").resolveTemplate("id", containerId); - ClientResponse response = null; + Response response = null; try { LOGGER.trace("POST: {}", webResource); - response = webResource.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).post(ClientResponse.class); - } catch (UniformInterfaceException exception) { + response = webResource.request().accept(MediaType.APPLICATION_JSON).post(Entity.entity(Response.class, MediaType.APPLICATION_JSON)); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 404) { LOGGER.warn("No such container {}", containerId); } else if (exception.getResponse().getStatus() == 204) { diff --git a/src/main/java/com/github/dockerjava/client/command/VersionCmd.java b/src/main/java/com/github/dockerjava/client/command/VersionCmd.java index c1809e4e7..5ad8c961a 100644 --- a/src/main/java/com/github/dockerjava/client/command/VersionCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/VersionCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -7,8 +8,7 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.model.Version; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; /** @@ -25,12 +25,12 @@ public String toString() { } protected Version impl() throws DockerException { - WebResource webResource = baseResource.path("/version"); + WebTarget webResource = baseResource.path("/version"); try { LOGGER.trace("GET: {}", webResource); - return webResource.accept(MediaType.APPLICATION_JSON).get(Version.class); - } catch (UniformInterfaceException exception) { + return webResource.request().accept(MediaType.APPLICATION_JSON).get(Version.class); + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 500) { throw new DockerException("Server error.", exception); } else { diff --git a/src/main/java/com/github/dockerjava/client/command/WaitContainerCmd.java b/src/main/java/com/github/dockerjava/client/command/WaitContainerCmd.java index 653a86db1..1ddbee86a 100644 --- a/src/main/java/com/github/dockerjava/client/command/WaitContainerCmd.java +++ b/src/main/java/com/github/dockerjava/client/command/WaitContainerCmd.java @@ -1,5 +1,6 @@ package com.github.dockerjava.client.command; +import javax.ws.rs.ClientErrorException; import javax.ws.rs.core.MediaType; import org.slf4j.Logger; @@ -9,8 +10,9 @@ import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.NotFoundException; import com.google.common.base.Preconditions; -import com.sun.jersey.api.client.UniformInterfaceException; -import com.sun.jersey.api.client.WebResource; +import javax.ws.rs.client.WebTarget; + +import static javax.ws.rs.client.Entity.entity; /** * Wait for a container to exit and print its exit code @@ -41,13 +43,13 @@ public String toString() { } protected Integer impl() throws DockerException { - WebResource webResource = baseResource.path(String.format("/containers/%s/wait", containerId)); + WebTarget webResource = baseResource.path("/containers/{id}/wait").resolveTemplate("id", containerId); try { LOGGER.trace("POST: {}", webResource); - ObjectNode ObjectNode = webResource.accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON).post(ObjectNode.class); + ObjectNode ObjectNode = webResource.request().accept(MediaType.APPLICATION_JSON).post(entity(null, MediaType.APPLICATION_JSON), ObjectNode.class); return ObjectNode.get("StatusCode").asInt(); - } catch (UniformInterfaceException exception) { + } catch (ClientErrorException exception) { if (exception.getResponse().getStatus() == 404) { throw new NotFoundException(String.format("No such container %s", containerId)); } else if (exception.getResponse().getStatus() == 500) { diff --git a/src/main/java/com/github/dockerjava/client/utils/JsonClientFilter.java b/src/main/java/com/github/dockerjava/client/utils/JsonClientFilter.java index a29255d3c..31b51845d 100644 --- a/src/main/java/com/github/dockerjava/client/utils/JsonClientFilter.java +++ b/src/main/java/com/github/dockerjava/client/utils/JsonClientFilter.java @@ -1,26 +1,25 @@ package com.github.dockerjava.client.utils; -import com.sun.jersey.api.client.ClientRequest; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.filter.ClientFilter; +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; /** * * @author Konstantin Pelykh (kpelykh@gmail.com) * */ -public class JsonClientFilter extends ClientFilter { +public class JsonClientFilter implements ClientResponseFilter { - public ClientResponse handle(ClientRequest cr) { - // Call the next filter - ClientResponse resp = getNext().handle(cr); - String respContentType = resp.getHeaders().getFirst("Content-Type"); - if (respContentType != null && respContentType.startsWith("text/plain")) { - String newContentType = "application/json" + respContentType.substring(10); - resp.getHeaders().putSingle("Content-Type", newContentType); + + @Override + public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException { + if (responseContext.getMediaType() != null && responseContext.getMediaType().isCompatible(MediaType.TEXT_PLAIN_TYPE)) { + String newContentType = "application/json" + responseContext.getMediaType().toString().substring(10); + responseContext.getHeaders().putSingle("Content-Type", newContentType); } - return resp; } - } diff --git a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java index 21c78e54e..918d51ee9 100644 --- a/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java +++ b/src/test/java/com/github/dockerjava/client/AbstractDockerClientTest.java @@ -2,13 +2,13 @@ import com.github.dockerjava.client.DockerClient; import com.github.dockerjava.client.DockerException; -import com.sun.jersey.api.client.ClientResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; import org.testng.ITestResult; +import javax.ws.rs.core.Response; import java.io.IOException; import java.lang.reflect.Method; import java.net.DatagramSocket; @@ -82,7 +82,7 @@ public void afterMethod(ITestResult result) { result.getName()); } - protected String logResponseStream(ClientResponse response) { + protected String logResponseStream(Response response) { String responseString; try { responseString = DockerClient.asString(response); diff --git a/src/test/java/com/github/dockerjava/client/command/AuthCmdTest.java b/src/test/java/com/github/dockerjava/client/command/AuthCmdTest.java index 608d84535..fd4513827 100644 --- a/src/test/java/com/github/dockerjava/client/command/AuthCmdTest.java +++ b/src/test/java/com/github/dockerjava/client/command/AuthCmdTest.java @@ -3,12 +3,12 @@ import com.github.dockerjava.client.AbstractDockerClientTest; import com.github.dockerjava.client.DockerClient; import com.github.dockerjava.client.DockerException; -import com.sun.jersey.api.client.UniformInterfaceException; import org.hamcrest.Matchers; import org.testng.ITestResult; import org.testng.annotations.*; +import javax.ws.rs.ClientErrorException; import java.lang.reflect.Method; import static org.hamcrest.MatcherAssert.assertThat; @@ -46,8 +46,8 @@ public void testAuthInvalid() throws Exception { new DockerClient().authCmd().exec(); fail("Expected a DockerException caused by a bad password."); } catch (DockerException e) { - assertThat(e.getCause(), Matchers.instanceOf(UniformInterfaceException.class)); - assertEquals(((UniformInterfaceException) e.getCause()).getResponse().getStatus(), 401); + assertThat(e.getCause(), Matchers.instanceOf(ClientErrorException.class)); + assertEquals(((ClientErrorException) e.getCause()).getResponse().getStatus(), 401); } } } diff --git a/src/test/java/com/github/dockerjava/client/command/BuildImageCmdTest.java b/src/test/java/com/github/dockerjava/client/command/BuildImageCmdTest.java index 17934c062..bec603094 100644 --- a/src/test/java/com/github/dockerjava/client/command/BuildImageCmdTest.java +++ b/src/test/java/com/github/dockerjava/client/command/BuildImageCmdTest.java @@ -10,12 +10,14 @@ import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.io.StringWriter; import java.lang.reflect.Method; import org.apache.commons.io.IOUtils; import org.apache.commons.io.LineIterator; import org.apache.commons.lang.StringUtils; +import org.glassfish.jersey.client.ClientResponse; import org.testng.ITestResult; import org.testng.annotations.AfterMethod; import org.testng.annotations.AfterTest; @@ -25,7 +27,8 @@ import com.github.dockerjava.client.AbstractDockerClientTest; import com.github.dockerjava.client.DockerException; -import com.sun.jersey.api.client.ClientResponse; + +import javax.ws.rs.core.Response; public class BuildImageCmdTest extends AbstractDockerClientTest { @@ -55,20 +58,21 @@ public void testNginxDockerfileBuilder() throws DockerException, File baseDir = new File(Thread.currentThread().getContextClassLoader() .getResource("nginx").getFile()); - ClientResponse response = dockerClient.buildImageCmd(baseDir).exec(); + Response response = dockerClient.buildImageCmd(baseDir).exec(); StringWriter logwriter = new StringWriter(); + InputStream is = response.readEntity(InputStream.class); try { - LineIterator itr = IOUtils.lineIterator( - response.getEntityInputStream(), "UTF-8"); + LineIterator itr = IOUtils.lineIterator( + is, "UTF-8"); while (itr.hasNext()) { String line = itr.next(); logwriter.write(line + "\n"); LOG.info(line); } } finally { - IOUtils.closeQuietly(response.getEntityInputStream()); + IOUtils.closeQuietly(is); } String fullLog = logwriter.toString(); @@ -115,20 +119,21 @@ private String dockerfileBuild(File baseDir, String expectedText) throws DockerException, IOException { // Build image - ClientResponse response = dockerClient.buildImageCmd(baseDir).exec(); + Response response = dockerClient.buildImageCmd(baseDir).exec(); StringWriter logwriter = new StringWriter(); + InputStream is = response.readEntity(InputStream.class); try { - LineIterator itr = IOUtils.lineIterator( - response.getEntityInputStream(), "UTF-8"); + LineIterator itr = IOUtils.lineIterator( + is, "UTF-8"); while (itr.hasNext()) { String line = itr.next(); logwriter.write(line + "\n"); LOG.info(line); } } finally { - IOUtils.closeQuietly(response.getEntityInputStream()); + IOUtils.closeQuietly(is); } String fullLog = logwriter.toString(); @@ -150,7 +155,7 @@ private String dockerfileBuild(File baseDir, String expectedText) tmpContainers.add(container.getId()); // Log container - ClientResponse logResponse = logContainer(container + Response logResponse = logContainer(container .getId()); assertThat(logResponseStream(logResponse), containsString(expectedText)); @@ -159,7 +164,7 @@ private String dockerfileBuild(File baseDir, String expectedText) } - private ClientResponse logContainer(String containerId) { + private Response logContainer(String containerId) { return dockerClient.logContainerCmd(containerId).withStdErr().withStdOut().exec(); } @@ -169,20 +174,21 @@ public void testNetCatDockerfileBuilder() throws DockerException, File baseDir = new File(Thread.currentThread().getContextClassLoader() .getResource("netcat").getFile()); - ClientResponse response = dockerClient.buildImageCmd(baseDir).withNoCache().exec(); + Response response = dockerClient.buildImageCmd(baseDir).withNoCache().exec(); StringWriter logwriter = new StringWriter(); + InputStream is = response.readEntity(InputStream.class); try { - LineIterator itr = IOUtils.lineIterator( - response.getEntityInputStream(), "UTF-8"); + LineIterator itr = IOUtils.lineIterator( + is, "UTF-8"); while (itr.hasNext()) { String line = itr.next(); logwriter.write(line + "\n"); LOG.info(line); } } finally { - IOUtils.closeQuietly(response.getEntityInputStream()); + IOUtils.closeQuietly(is); } String fullLog = logwriter.toString(); diff --git a/src/test/java/com/github/dockerjava/client/command/CopyFileFromContainerCmdTest.java b/src/test/java/com/github/dockerjava/client/command/CopyFileFromContainerCmdTest.java index 4ef739887..3d6f6ff37 100644 --- a/src/test/java/com/github/dockerjava/client/command/CopyFileFromContainerCmdTest.java +++ b/src/test/java/com/github/dockerjava/client/command/CopyFileFromContainerCmdTest.java @@ -1,10 +1,10 @@ package com.github.dockerjava.client.command; import com.github.dockerjava.client.AbstractDockerClientTest; -import com.sun.jersey.api.client.ClientResponse; import org.testng.ITestResult; import org.testng.annotations.*; +import javax.ws.rs.core.Response; import java.lang.reflect.Method; import static org.hamcrest.Matchers.*; @@ -46,7 +46,7 @@ public void copyFromContainer() { dockerClient.startContainerCmd(container.getId()).exec(); tmpContainers.add(container.getId()); - ClientResponse response = dockerClient.copyFileFromContainerCmd(container.getId(), "/test").exec(); + Response response = dockerClient.copyFileFromContainerCmd(container.getId(), "/test").exec(); assertTrue(response.getStatus() == 200 && response.hasEntity(), "The file was not copied from the container."); } } diff --git a/src/test/java/com/github/dockerjava/client/command/LogContainerCmdTest.java b/src/test/java/com/github/dockerjava/client/command/LogContainerCmdTest.java index 43c54d22e..f09de8e27 100644 --- a/src/test/java/com/github/dockerjava/client/command/LogContainerCmdTest.java +++ b/src/test/java/com/github/dockerjava/client/command/LogContainerCmdTest.java @@ -18,7 +18,8 @@ import com.github.dockerjava.client.AbstractDockerClientTest; import com.github.dockerjava.client.DockerException; -import com.sun.jersey.api.client.ClientResponse; + +import javax.ws.rs.core.Response; public class LogContainerCmdTest extends AbstractDockerClientTest { @@ -60,7 +61,7 @@ public void logContainer() throws DockerException, IOException { assertThat(exitCode, equalTo(0)); - ClientResponse response = dockerClient.logContainerCmd(container.getId()).withStdErr().withStdOut().exec(); + Response response = dockerClient.logContainerCmd(container.getId()).withStdErr().withStdOut().exec(); assertThat(logResponseStream(response), endsWith(snippet)); } diff --git a/src/test/java/com/github/dockerjava/client/command/PullImageCmdTest.java b/src/test/java/com/github/dockerjava/client/command/PullImageCmdTest.java index 0472720d9..fd1d09354 100644 --- a/src/test/java/com/github/dockerjava/client/command/PullImageCmdTest.java +++ b/src/test/java/com/github/dockerjava/client/command/PullImageCmdTest.java @@ -18,7 +18,8 @@ import com.github.dockerjava.client.AbstractDockerClientTest; import com.github.dockerjava.client.DockerException; import com.github.dockerjava.client.model.Info; -import com.sun.jersey.api.client.ClientResponse; + +import javax.ws.rs.core.Response; public class PullImageCmdTest extends AbstractDockerClientTest { @@ -70,7 +71,7 @@ public void testPullImage() throws DockerException, IOException { LOG.info("Pulling image: {}", testImage); tmpImgs.add(testImage); - ClientResponse response = dockerClient.pullImageCmd(testImage).exec(); + Response response = dockerClient.pullImageCmd(testImage).exec(); assertThat(logResponseStream(response), containsString("Download complete"));