diff --git a/pom.xml b/pom.xml
index d8f1fbac6..575fd95b1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,14 +50,14 @@
1.6.1
- 2.11
+ 1.18
1.9
2.3.3
4.2.5
1.5
- 1.8
+ 1.8
2.3
2.6
1.7.5
@@ -87,16 +87,44 @@
jackson-jaxrs-json-provider
${jackson-jaxrs.version}
-
-
-
-
-
-
- org.glassfish.jersey.core
- jersey-client
- ${jersey.version}
-
+
+
+
+
+
+ com.sun.jersey
+ jersey-core
+ ${jersey.version}
+
+
+ com.sun.jersey
+ jersey-client
+ ${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
@@ -138,10 +166,10 @@
- com.google.guava
- guava
- ${guava.version}
-
+ com.google.guava
+ guava
+ ${guava.version}
+
@@ -240,6 +268,15 @@
ISO-8859-1
${jdk.debug}
${jdk.optimize}
+
+
+
+ **/jaxrs2/*.java
+ **/jaxrs2/util/*.java
+
+
+ **/jaxrs2/*.java
+
@@ -338,6 +375,7 @@
release
+
org.apache.maven.plugins
diff --git a/src/main/java/com/github/dockerjava/api/command/StartContainerCmd.java b/src/main/java/com/github/dockerjava/api/command/StartContainerCmd.java
index ed16a727c..d41df1cf2 100644
--- a/src/main/java/com/github/dockerjava/api/command/StartContainerCmd.java
+++ b/src/main/java/com/github/dockerjava/api/command/StartContainerCmd.java
@@ -113,6 +113,20 @@ public interface StartContainerCmd extends DockerCmd {
* "CHOWN" prevents the container from changing the owner of any files.
*/
public StartContainerCmd withCapDrop(String... capDrop);
+
+ /**
+ * Perform the start using the existing host configuration for the container.
+ *
+ * @param withExisting true if the container's existing configuration should be used.
+ *
+ * @return
+ */
+ public StartContainerCmd withExistingConfig(boolean withExisting);
+
+ /**
+ * @return true if the container should use its existing configuration.
+ */
+ public boolean useExistingConfig();
/**
* @throws NotFoundException
diff --git a/src/main/java/com/github/dockerjava/core/command/CopyFileFromContainerCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/CopyFileFromContainerCmdImpl.java
index 929b6bf5f..04033906f 100644
--- a/src/main/java/com/github/dockerjava/core/command/CopyFileFromContainerCmdImpl.java
+++ b/src/main/java/com/github/dockerjava/core/command/CopyFileFromContainerCmdImpl.java
@@ -85,17 +85,4 @@ public InputStream exec() throws NotFoundException {
return super.exec();
}
-// protected InputStream impl() throws DockerException {
-//
-// CopyFileFromContainerCmd command = this;
-//
-// WebTarget webResource =
-// baseResource.path("/containers/{id}/copy").resolveTemplate("id", command.getContainerId());
-//
-// LOGGER.trace("POST: " + webResource.toString());
-//
-// return webResource.request().accept(MediaType.APPLICATION_OCTET_STREAM_TYPE).post(entity(command, MediaType.APPLICATION_JSON), Response.class).readEntity(InputStream.class);
-// }
-
-
}
diff --git a/src/main/java/com/github/dockerjava/core/command/StartContainerCmdImpl.java b/src/main/java/com/github/dockerjava/core/command/StartContainerCmdImpl.java
index 9cf830833..dd11ed74b 100644
--- a/src/main/java/com/github/dockerjava/core/command/StartContainerCmdImpl.java
+++ b/src/main/java/com/github/dockerjava/core/command/StartContainerCmdImpl.java
@@ -66,6 +66,9 @@ public class StartContainerCmdImpl extends AbstrDockerCmd, RES_T>
+ implements DockerCmdExec {
+
+ private WebResource baseResource;
+
+ public AbstrDockerCmdExec(WebResource baseResource) {
+ Preconditions.checkNotNull(baseResource,
+ "baseResource was not specified");
+ this.baseResource = baseResource;
+ }
+
+ protected WebResourceBuilder getBaseResource() {
+ return new WebResourceBuilder(baseResource);
+ }
+
+ public static class WebResourceBuilder {
+ WebResource resource;
+
+ private WebResourceBuilder(WebResource resource) {
+ this.resource = resource;
+ }
+
+ public WebResourceBuilder path(String pathStr) {
+ this.resource = this.resource.path(pathStr);
+ return this;
+ }
+
+ public WebResourceBuilder resolveTemplate(String path, String... values) {
+ UriTemplate tmplt = new UriTemplate(path);
+ this.resource = this.resource.path(tmplt.createURI(values));
+ return this;
+ }
+
+ public WebResourceBuilder queryParam(String name, String value) {
+ if (value != null) {
+ this.resource = this.resource.queryParam(name, value);
+ }
+ return this;
+ }
+
+ public WebResource build() {
+ return this.resource;
+ }
+ }
+
+ protected String registryAuth(AuthConfig authConfig) {
+ try {
+ return Base64.encodeBase64String(new ObjectMapper()
+ .writeValueAsString(authConfig).getBytes());
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public RES_T exec(CMD_T command) {
+ // this hack works because of ResponseStatusExceptionFilter
+ RES_T result;
+ try {
+ result = execute(command);
+ } catch (ClientHandlerException e) {
+ if(e.getCause() instanceof DockerException) {
+ throw (DockerException)e.getCause();
+ } else {
+ throw e;
+ }
+ }
+ return result;
+ }
+
+ protected abstract RES_T execute(CMD_T command);
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/AttachContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/AttachContainerCmdExec.java
new file mode 100644
index 000000000..6a0c52f7b
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/AttachContainerCmdExec.java
@@ -0,0 +1,39 @@
+package com.github.dockerjava.jaxrs1;
+
+import java.io.InputStream;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.AttachContainerCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class AttachContainerCmdExec extends AbstrDockerCmdExec implements AttachContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(AttachContainerCmdExec.class);
+
+ public AttachContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected InputStream execute(AttachContainerCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/containers/{id}/attach", command.getContainerId())
+ .queryParam("logs", command.hasLogsEnabled() ? "1" : "0")
+ .queryParam("stdout", command.hasStdoutEnabled() ? "1" : "0")
+ .queryParam("stderr", command.hasStderrEnabled() ? "1" : "0")
+ .queryParam("stream", command.hasFollowStreamEnabled() ? "1" : "0")
+ .build();
+
+ LOGGER.trace("POST: {}", webResource);
+
+ return webResource.accept(MediaType.APPLICATION_OCTET_STREAM_TYPE)
+ .entity(null, MediaType.APPLICATION_JSON)
+ .post(InputStream.class);
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/AuthCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/AuthCmdExec.java
new file mode 100644
index 000000000..6fcc7d11a
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/AuthCmdExec.java
@@ -0,0 +1,38 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.UnauthorizedException;
+import com.github.dockerjava.api.command.AuthCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class AuthCmdExec extends AbstrDockerCmdExec implements AuthCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(AuthCmdExec.class);
+
+ public AuthCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Void execute(AuthCmd command) {
+ WebResource webResource = getBaseResource().path("/auth").build();
+ LOGGER.trace("POST: {}", webResource);
+ Response response = webResource
+ .accept(MediaType.APPLICATION_JSON)
+ .entity(command.getAuthConfig(), MediaType.APPLICATION_JSON)
+ .post(Response.class);
+
+ if(response.getStatus() == 401) {
+ throw new UnauthorizedException("Unauthorized");
+ };
+
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/BuildImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/BuildImageCmdExec.java
new file mode 100644
index 000000000..e3cbb7017
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/BuildImageCmdExec.java
@@ -0,0 +1,47 @@
+package com.github.dockerjava.jaxrs1;
+
+import java.io.InputStream;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.BuildImageCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class BuildImageCmdExec extends AbstrDockerCmdExec implements BuildImageCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(BuildImageCmdExec.class);
+
+ public BuildImageCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected InputStream execute(BuildImageCmd command) {
+ WebResource webResource = getBaseResource().path("/build").build();
+
+ if(command.getTag() != null) {
+ webResource = webResource.queryParam("t", command.getTag());
+ }
+ if (command.hasNoCacheEnabled()) {
+ webResource = webResource.queryParam("nocache", "true");
+ }
+ if (command.hasRemoveEnabled()) {
+ webResource = webResource.queryParam("rm", "true");
+ }
+ if (command.isQuiet()) {
+ webResource = webResource.queryParam("q", "true");
+ }
+
+ LOGGER.debug("POST: {}", webResource);
+ return webResource
+ .accept(MediaType.TEXT_PLAIN)
+ .entity(command.getTarInputStream(), "application/tar")
+ .post(InputStream.class);
+
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/CommitCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/CommitCmdExec.java
new file mode 100644
index 000000000..ccf667591
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/CommitCmdExec.java
@@ -0,0 +1,41 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.github.dockerjava.api.command.CommitCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class CommitCmdExec extends AbstrDockerCmdExec implements CommitCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(CommitCmdExec.class);
+
+ public CommitCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected String execute(CommitCmd command) {
+ WebResource webResource = getBaseResource()
+ .path("/commit")
+ .queryParam("container", command.getContainerId())
+ .queryParam("repo", command.getRepository())
+ .queryParam("tag", command.getTag())
+ .queryParam("m", command.getMessage())
+ .queryParam("author", command.getAuthor())
+ .queryParam("pause", command.hasPauseEnabled() ? "1" : "0")
+ .build();
+
+ LOGGER.trace("POST: {}", webResource);
+ ObjectNode objectNode = webResource
+ .accept("application/vnd.docker.raw-stream")
+ .entity(command, MediaType.APPLICATION_JSON)
+ .post(ObjectNode.class);
+ return objectNode.get("Id").asText();
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/ContainerDiffCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/ContainerDiffCmdExec.java
new file mode 100644
index 000000000..0867a678d
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/ContainerDiffCmdExec.java
@@ -0,0 +1,37 @@
+package com.github.dockerjava.jaxrs1;
+
+import java.util.List;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.ContainerDiffCmd;
+import com.github.dockerjava.api.model.ChangeLog;
+import com.sun.jersey.api.client.GenericType;
+import com.sun.jersey.api.client.WebResource;
+
+public class ContainerDiffCmdExec extends AbstrDockerCmdExec> implements ContainerDiffCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(ContainerDiffCmdExec.class);
+
+ public ContainerDiffCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected List execute(ContainerDiffCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/containers/{id}/changes", command.getContainerId())
+ .build();
+
+ LOGGER.trace("GET: {}", webResource);
+ return webResource
+ .accept(MediaType.APPLICATION_JSON)
+ .get(new GenericType>() {
+ });
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/CopyFileFromContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/CopyFileFromContainerCmdExec.java
new file mode 100644
index 000000000..4b808d17e
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/CopyFileFromContainerCmdExec.java
@@ -0,0 +1,36 @@
+package com.github.dockerjava.jaxrs1;
+
+import java.io.InputStream;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.CopyFileFromContainerCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class CopyFileFromContainerCmdExec extends AbstrDockerCmdExec implements CopyFileFromContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(CopyFileFromContainerCmdExec.class);
+
+ public CopyFileFromContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected InputStream execute(CopyFileFromContainerCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/containers/{id}/copy", command.getContainerId())
+ .build();
+
+ LOGGER.trace("POST: " + webResource.toString());
+
+ return webResource
+ .accept(MediaType.APPLICATION_OCTET_STREAM_TYPE)
+ .entity(command, MediaType.APPLICATION_JSON)
+ .post(InputStream.class);
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/CreateContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/CreateContainerCmdExec.java
new file mode 100644
index 000000000..4b7d38281
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/CreateContainerCmdExec.java
@@ -0,0 +1,34 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.CreateContainerCmd;
+import com.github.dockerjava.api.command.CreateContainerResponse;
+import com.sun.jersey.api.client.WebResource;
+
+public class CreateContainerCmdExec extends AbstrDockerCmdExec implements CreateContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(CreateContainerCmdExec.class);
+
+ public CreateContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected CreateContainerResponse execute(CreateContainerCmd command) {
+ WebResource webResource = getBaseResource().path("/containers/create").build();
+
+ if (command.getName() != null) {
+ webResource = webResource.queryParam("name", command.getName());
+ }
+
+ LOGGER.trace("POST: {} ", webResource);
+ return webResource.accept(MediaType.APPLICATION_JSON)
+ .entity(command, MediaType.APPLICATION_JSON)
+ .post(CreateContainerResponse.class);
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/CreateImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/CreateImageCmdExec.java
new file mode 100644
index 000000000..3c4da1929
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/CreateImageCmdExec.java
@@ -0,0 +1,35 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.CreateImageCmd;
+import com.github.dockerjava.api.command.CreateImageResponse;
+import com.sun.jersey.api.client.WebResource;
+
+public class CreateImageCmdExec extends AbstrDockerCmdExec implements CreateImageCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(CreateImageCmdExec.class);
+
+ public CreateImageCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected CreateImageResponse execute(CreateImageCmd command) {
+ WebResource webResource = getBaseResource()
+ .path("/images/create")
+ .queryParam("repo", command.getRepository())
+ .queryParam("tag", command.getTag())
+ .queryParam("fromSrc", "-")
+ .build();
+
+ LOGGER.trace("POST: {}", webResource);
+ return webResource.accept(MediaType.APPLICATION_OCTET_STREAM_TYPE)
+ .entity(command.getImageStream(), MediaType.APPLICATION_OCTET_STREAM)
+ .post(CreateImageResponse.class);
+ }
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/jaxrs1/DockerCmdExecFactoryImpl.java
new file mode 100644
index 000000000..328e59406
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/DockerCmdExecFactoryImpl.java
@@ -0,0 +1,275 @@
+package com.github.dockerjava.jaxrs1;
+
+import java.io.IOException;
+import java.util.logging.Logger;
+
+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 com.github.dockerjava.api.command.AttachContainerCmd;
+import com.github.dockerjava.api.command.AuthCmd;
+import com.github.dockerjava.api.command.BuildImageCmd;
+import com.github.dockerjava.api.command.CommitCmd;
+import com.github.dockerjava.api.command.ContainerDiffCmd;
+import com.github.dockerjava.api.command.CopyFileFromContainerCmd;
+import com.github.dockerjava.api.command.CreateContainerCmd;
+import com.github.dockerjava.api.command.CreateImageCmd;
+import com.github.dockerjava.api.command.DockerCmdExecFactory;
+import com.github.dockerjava.api.command.EventsCmd;
+import com.github.dockerjava.api.command.InfoCmd;
+import com.github.dockerjava.api.command.InspectContainerCmd;
+import com.github.dockerjava.api.command.InspectImageCmd;
+import com.github.dockerjava.api.command.KillContainerCmd;
+import com.github.dockerjava.api.command.ListContainersCmd;
+import com.github.dockerjava.api.command.ListImagesCmd;
+import com.github.dockerjava.api.command.LogContainerCmd;
+import com.github.dockerjava.api.command.PauseContainerCmd;
+import com.github.dockerjava.api.command.PingCmd;
+import com.github.dockerjava.api.command.PullImageCmd;
+import com.github.dockerjava.api.command.PushImageCmd;
+import com.github.dockerjava.api.command.RemoveContainerCmd;
+import com.github.dockerjava.api.command.RemoveImageCmd;
+import com.github.dockerjava.api.command.RestartContainerCmd;
+import com.github.dockerjava.api.command.SearchImagesCmd;
+import com.github.dockerjava.api.command.StartContainerCmd;
+import com.github.dockerjava.api.command.StopContainerCmd;
+import com.github.dockerjava.api.command.TagImageCmd;
+import com.github.dockerjava.api.command.TopContainerCmd;
+import com.github.dockerjava.api.command.UnpauseContainerCmd;
+import com.github.dockerjava.api.command.VersionCmd;
+import com.github.dockerjava.api.command.WaitContainerCmd;
+import com.github.dockerjava.core.DockerClientConfig;
+import com.github.dockerjava.jaxrs1.util.JsonClientFilter;
+import com.github.dockerjava.jaxrs1.util.SelectiveLoggingFilter;
+import com.google.common.base.Preconditions;
+import com.sun.jersey.api.client.Client;
+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;
+
+public class DockerCmdExecFactoryImpl implements DockerCmdExecFactory {
+
+ private Client client;
+
+ private WebResource baseResource;
+
+ private static final Logger LOGGER = Logger.getLogger(DockerCmdExecFactoryImpl.class.getName());
+
+
+ @Override
+ public void init(DockerClientConfig dockerClientConfig) {
+ Preconditions.checkNotNull(dockerClientConfig, "config was not specified");
+
+ 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());
+
+ if (dockerClientConfig.isLoggingFilterEnabled())
+ client.addFilter(new SelectiveLoggingFilter());
+
+ WebResource webResource = client.resource(dockerClientConfig.getUri());
+
+ if(dockerClientConfig.getVersion() != null) {
+ baseResource = webResource.path("v" + dockerClientConfig.getVersion());
+ } else {
+ baseResource = webResource;
+ }
+ }
+
+ 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()));
+
+ PoolingClientConnectionManager cm = new PoolingClientConnectionManager(schemeRegistry);
+ // Increase max total connection
+ cm.setMaxTotal(1000);
+ // Increase default max connection per route
+ cm.setDefaultMaxPerRoute(1000);
+
+ return new DefaultHttpClient(cm);
+ }
+
+ protected WebResource getBaseResource() {
+ Preconditions.checkNotNull(baseResource, "Factory not initialized. You probably forgot to call init()!");
+ return baseResource;
+ }
+
+ @Override
+ public AuthCmd.Exec createAuthCmdExec() {
+ return new AuthCmdExec(getBaseResource());
+ }
+
+ @Override
+ public InfoCmd.Exec createInfoCmdExec() {
+ return new InfoCmdExec(getBaseResource());
+ }
+
+ @Override
+ public PingCmd.Exec createPingCmdExec() {
+ return new PingCmdExec(getBaseResource());
+ }
+
+ @Override
+ public VersionCmd.Exec createVersionCmdExec() {
+ return new VersionCmdExec(getBaseResource());
+ }
+
+ @Override
+ public PullImageCmd.Exec createPullImageCmdExec() {
+ return new PullImageCmdExec(getBaseResource());
+ }
+
+ @Override
+ public PushImageCmd.Exec createPushImageCmdExec() {
+ return new PushImageCmdExec(getBaseResource());
+ }
+
+ @Override
+ public CreateImageCmd.Exec createCreateImageCmdExec() {
+ return new CreateImageCmdExec(getBaseResource());
+ }
+
+ @Override
+ public SearchImagesCmd.Exec createSearchImagesCmdExec() {
+ return new SearchImagesCmdExec(getBaseResource());
+ }
+
+ @Override
+ public RemoveImageCmd.Exec createRemoveImageCmdExec() {
+ return new RemoveImageCmdExec(getBaseResource());
+ }
+
+ @Override
+ public ListImagesCmd.Exec createListImagesCmdExec() {
+ return new ListImagesCmdExec(getBaseResource());
+ }
+
+ @Override
+ public InspectImageCmd.Exec createInspectImageCmdExec() {
+ return new InspectImageCmdExec(getBaseResource());
+ }
+
+ @Override
+ public ListContainersCmd.Exec createListContainersCmdExec() {
+ return new ListContainersCmdExec(getBaseResource());
+ }
+
+ @Override
+ public CreateContainerCmd.Exec createCreateContainerCmdExec() {
+ return new CreateContainerCmdExec(getBaseResource());
+ }
+
+ @Override
+ public StartContainerCmd.Exec createStartContainerCmdExec() {
+ return new StartContainerCmdExec(getBaseResource());
+ }
+
+ @Override
+ public InspectContainerCmd.Exec createInspectContainerCmdExec() {
+ return new InspectContainerCmdExec(getBaseResource());
+ }
+
+ @Override
+ public RemoveContainerCmd.Exec createRemoveContainerCmdExec() {
+ return new RemoveContainerCmdExec(getBaseResource());
+ }
+
+ @Override
+ public WaitContainerCmd.Exec createWaitContainerCmdExec() {
+ return new WaitContainerCmdExec(getBaseResource());
+ }
+
+ @Override
+ public AttachContainerCmd.Exec createAttachContainerCmdExec() {
+ return new AttachContainerCmdExec(getBaseResource());
+ }
+
+ @Override
+ public LogContainerCmd.Exec createLogContainerCmdExec() {
+ return new LogContainerCmdExec(getBaseResource());
+ }
+
+ @Override
+ public CopyFileFromContainerCmd.Exec createCopyFileFromContainerCmdExec() {
+ return new CopyFileFromContainerCmdExec(getBaseResource());
+ }
+
+ @Override
+ public StopContainerCmd.Exec createStopContainerCmdExec() {
+ return new StopContainerCmdExec(getBaseResource());
+ }
+
+ @Override
+ public ContainerDiffCmd.Exec createContainerDiffCmdExec() {
+ return new ContainerDiffCmdExec(getBaseResource());
+ }
+
+ @Override
+ public KillContainerCmd.Exec createKillContainerCmdExec() {
+ return new KillContainerCmdExec(getBaseResource());
+ }
+
+ @Override
+ public RestartContainerCmd.Exec createRestartContainerCmdExec() {
+ return new RestartContainerCmdExec(getBaseResource());
+ }
+
+ @Override
+ public CommitCmd.Exec createCommitCmdExec() {
+ return new CommitCmdExec(getBaseResource());
+ }
+
+ @Override
+ public BuildImageCmd.Exec createBuildImageCmdExec() {
+ return new BuildImageCmdExec(getBaseResource());
+ }
+
+ @Override
+ public TopContainerCmd.Exec createTopContainerCmdExec() {
+ return new TopContainerCmdExec(getBaseResource());
+ }
+
+ @Override
+ public TagImageCmd.Exec createTagImageCmdExec() {
+ return new TagImageCmdExec(getBaseResource());
+ }
+
+ @Override
+ public PauseContainerCmd.Exec createPauseContainerCmdExec() {
+ return new PauseContainerCmdExec(getBaseResource());
+ }
+
+ @Override
+ public UnpauseContainerCmd.Exec createUnpauseContainerCmdExec() {
+ return new UnpauseContainerCmdExec(baseResource);
+ }
+
+ @Override
+ public EventsCmd.Exec createEventsCmdExec() {
+ return new EventsCmdExec(getBaseResource());
+ }
+
+ @Override
+ public void close() throws IOException {
+ Preconditions.checkNotNull(client, "Factory not initialized. You probably forgot to call init()!");
+ client.destroy();
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/EventsCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/EventsCmdExec.java
new file mode 100644
index 000000000..0b22cebc2
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/EventsCmdExec.java
@@ -0,0 +1,87 @@
+package com.github.dockerjava.jaxrs1;
+
+import java.io.InputStream;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.dockerjava.api.command.EventCallback;
+import com.github.dockerjava.api.command.EventsCmd;
+import com.github.dockerjava.api.model.Event;
+import com.google.common.base.Preconditions;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+
+public class EventsCmdExec extends AbstrDockerCmdExec implements EventsCmd.Exec {
+ private static final Logger LOGGER = LoggerFactory.getLogger(EventsCmdExec.class);
+
+ public EventsCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected ExecutorService execute(EventsCmd command) {
+ ExecutorService executorService = Executors.newSingleThreadExecutor();
+
+ WebResource webResource = getBaseResource().path("/events")
+ .queryParam("since", command.getSince())
+ .queryParam("until", command.getUntil())
+ .build();
+
+ LOGGER.trace("GET: {}", webResource);
+ EventNotifier eventNotifier = EventNotifier.create(command.getEventCallback(), webResource);
+ executorService.submit(eventNotifier);
+ return executorService;
+ }
+
+ private static class EventNotifier implements Callable {
+ private static final JsonFactory JSON_FACTORY = new JsonFactory();
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+
+ private final EventCallback eventCallback;
+ private final WebResource WebResource;
+
+ private EventNotifier(EventCallback eventCallback, WebResource WebResource) {
+ this.eventCallback = eventCallback;
+ this.WebResource = WebResource;
+ }
+
+ public static EventNotifier create(EventCallback eventCallback, WebResource WebResource) {
+ Preconditions.checkNotNull(eventCallback, "An EventCallback must be provided");
+ Preconditions.checkNotNull(WebResource, "An WebResource must be provided");
+ return new EventNotifier(eventCallback, WebResource);
+ }
+
+ @Override
+ public Void call() throws Exception {
+ int numEvents=0;
+ ClientResponse response = null;
+ try {
+ response = WebResource.get(ClientResponse.class);
+ InputStream inputStream = response.getEntityInputStream();
+ JsonParser jp = JSON_FACTORY.createParser(inputStream);
+ while (jp.nextToken() != JsonToken.END_OBJECT && !jp.isClosed()) {
+ eventCallback.onEvent(OBJECT_MAPPER.readValue(jp, Event.class));
+ numEvents++;
+ }
+ }
+ catch(Exception e) {
+ eventCallback.onException(e);
+ }
+ finally {
+ if (response != null) {
+ response.close();
+ }
+ }
+ eventCallback.onCompletion(numEvents);
+ return null;
+ }
+ }
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/InfoCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/InfoCmdExec.java
new file mode 100644
index 000000000..b1d1be48c
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/InfoCmdExec.java
@@ -0,0 +1,29 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.InfoCmd;
+import com.github.dockerjava.api.model.Info;
+import com.sun.jersey.api.client.WebResource;
+
+public class InfoCmdExec extends AbstrDockerCmdExec implements InfoCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(InfoCmdExec.class);
+
+ public InfoCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Info execute(InfoCmd command) {
+ WebResource webResource = getBaseResource().path("/info").build();
+
+ LOGGER.trace("GET: {}", webResource);
+ return webResource.accept(MediaType.APPLICATION_JSON).get(Info.class);
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/InspectContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/InspectContainerCmdExec.java
new file mode 100644
index 000000000..e32a98351
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/InspectContainerCmdExec.java
@@ -0,0 +1,31 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.InspectContainerCmd;
+import com.github.dockerjava.api.command.InspectContainerResponse;
+import com.sun.jersey.api.client.WebResource;
+
+public class InspectContainerCmdExec extends AbstrDockerCmdExec implements InspectContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(InspectContainerCmdExec.class);
+
+ public InspectContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected InspectContainerResponse execute(InspectContainerCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/containers/{id}/json", command.getContainerId())
+ .build();
+
+ LOGGER.debug("GET: {}", webResource);
+ return webResource.accept(MediaType.APPLICATION_JSON).get(InspectContainerResponse.class);
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/InspectImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/InspectImageCmdExec.java
new file mode 100644
index 000000000..20df12d88
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/InspectImageCmdExec.java
@@ -0,0 +1,31 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.InspectImageCmd;
+import com.github.dockerjava.api.command.InspectImageResponse;
+import com.sun.jersey.api.client.WebResource;
+
+public class InspectImageCmdExec extends AbstrDockerCmdExec implements InspectImageCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(InspectImageCmdExec.class);
+
+ public InspectImageCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected InspectImageResponse execute(InspectImageCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/images/{id}/json", command.getImageId())
+ .build();
+
+ LOGGER.trace("GET: {}", webResource);
+ return webResource.accept(MediaType.APPLICATION_JSON).get(InspectImageResponse.class);
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/KillContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/KillContainerCmdExec.java
new file mode 100644
index 000000000..e9763a182
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/KillContainerCmdExec.java
@@ -0,0 +1,37 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.KillContainerCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class KillContainerCmdExec extends AbstrDockerCmdExec implements KillContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(KillContainerCmdExec.class);
+
+ public KillContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Void execute(KillContainerCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/containers/{id}/kill", command.getContainerId())
+ .build();
+
+ if(command.getSignal() != null) {
+ webResource = webResource.queryParam("signal", command.getSignal());
+ }
+
+ LOGGER.trace("POST: {}", webResource);
+ webResource.accept(MediaType.APPLICATION_JSON)
+ .post();
+
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/ListContainersCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/ListContainersCmdExec.java
new file mode 100644
index 000000000..40bf4d6dd
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/ListContainersCmdExec.java
@@ -0,0 +1,45 @@
+package com.github.dockerjava.jaxrs1;
+
+import java.util.List;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.ListContainersCmd;
+import com.github.dockerjava.api.model.Container;
+import com.sun.jersey.api.client.GenericType;
+import com.sun.jersey.api.client.WebResource;
+
+public class ListContainersCmdExec extends AbstrDockerCmdExec> implements ListContainersCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ListContainersCmdExec.class);
+
+ public ListContainersCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected List execute(ListContainersCmd command) {
+ WebResource webResource = getBaseResource().path("/containers/json")
+ .queryParam("all", command.hasShowAllEnabled() ? "1" : "0")
+ .queryParam("since", command.getSinceId())
+ .queryParam("before", command.getBeforeId())
+ .queryParam("size", command.hasShowSizeEnabled() ? "1" : "0")
+ .build();
+
+ if (command.getLimit() >= 0) {
+ webResource = webResource.queryParam("limit", String.valueOf(command.getLimit()));
+ }
+
+ LOGGER.trace("GET: {}", webResource);
+ List containers = webResource
+ .accept(MediaType.APPLICATION_JSON)
+ .get(new GenericType>() {});
+ LOGGER.trace("Response: {}", containers);
+
+ return containers;
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/ListImagesCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/ListImagesCmdExec.java
new file mode 100644
index 000000000..056dc355d
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/ListImagesCmdExec.java
@@ -0,0 +1,41 @@
+package com.github.dockerjava.jaxrs1;
+
+import java.util.List;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.ListImagesCmd;
+import com.github.dockerjava.api.model.Image;
+import com.sun.jersey.api.client.GenericType;
+import com.sun.jersey.api.client.WebResource;
+
+public class ListImagesCmdExec extends AbstrDockerCmdExec> implements ListImagesCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(ListImagesCmdExec.class);
+
+ public ListImagesCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected List execute(ListImagesCmd command) {
+ WebResource webResource = getBaseResource()
+ .path("/images/json")
+ .queryParam("filter", command.getFilter())
+ .queryParam("all", command.hasShowAllEnabled() ? "1" : "0")
+ .build();
+
+ LOGGER.trace("GET: {}", webResource);
+
+ List images = webResource
+ .accept(MediaType.APPLICATION_JSON)
+ .get(new GenericType>() {});
+ LOGGER.trace("Response: {}", images);
+
+ return images;
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/LogContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/LogContainerCmdExec.java
new file mode 100644
index 000000000..091ddbace
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/LogContainerCmdExec.java
@@ -0,0 +1,35 @@
+package com.github.dockerjava.jaxrs1;
+
+import java.io.InputStream;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.LogContainerCmd;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
+
+public class LogContainerCmdExec extends AbstrDockerCmdExec implements LogContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(LogContainerCmdExec.class);
+
+ public LogContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected InputStream execute(LogContainerCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/containers/{id}/logs", command.getContainerId())
+ .queryParam("timestamps", command.hasTimestampsEnabled() ? "1" : "0")
+ .queryParam("stdout", command.hasStdoutEnabled() ? "1" : "0")
+ .queryParam("stderr", command.hasStderrEnabled() ? "1" : "0")
+ .queryParam("follow", command.hasFollowStreamEnabled() ? "1" : "0")
+ .queryParam("tail", command.getTail() < 0 ? "all" : "" + command.getTail())
+ .build();
+
+ LOGGER.trace("GET: {}", webResource);
+ return webResource.get(ClientResponse.class).getEntityInputStream();
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/PauseContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/PauseContainerCmdExec.java
new file mode 100644
index 000000000..e0ec59ee5
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/PauseContainerCmdExec.java
@@ -0,0 +1,35 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.PauseContainerCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class PauseContainerCmdExec extends AbstrDockerCmdExec implements PauseContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(PauseContainerCmdExec.class);
+
+ public PauseContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Void execute(PauseContainerCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/containers/{id}/pause", command.getContainerId())
+ .build();
+
+ LOGGER.trace("POST: {}", webResource);
+ webResource
+ .accept(MediaType.APPLICATION_JSON)
+ .entity(null, MediaType.APPLICATION_JSON)
+ .post(Response.class);
+
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/PingCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/PingCmdExec.java
new file mode 100644
index 000000000..5185af9a2
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/PingCmdExec.java
@@ -0,0 +1,29 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.Response;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.PingCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class PingCmdExec extends AbstrDockerCmdExec implements PingCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(PingCmdExec.class);
+
+ public PingCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Void execute(PingCmd command) {
+ WebResource webResource = getBaseResource().path("/_ping").build();
+
+ LOGGER.trace("GET: {}", webResource);
+ webResource.get(Response.class);
+
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/PullImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/PullImageCmdExec.java
new file mode 100644
index 000000000..2bc6ed04a
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/PullImageCmdExec.java
@@ -0,0 +1,36 @@
+package com.github.dockerjava.jaxrs1;
+
+import java.io.InputStream;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.PullImageCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class PullImageCmdExec extends AbstrDockerCmdExec implements PullImageCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(PullImageCmdExec.class);
+
+ public PullImageCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected InputStream execute(PullImageCmd command) {
+ WebResource webResource = getBaseResource().path("/images/create")
+ .queryParam("tag", command.getTag())
+ .queryParam("fromImage", command.getRepository())
+ .queryParam("registry", command.getRegistry())
+ .build();
+
+ LOGGER.trace("POST: {}", webResource);
+ return webResource
+ .accept(MediaType.APPLICATION_OCTET_STREAM_TYPE)
+ .post(InputStream.class);
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/PushImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/PushImageCmdExec.java
new file mode 100644
index 000000000..149ebb3e1
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/PushImageCmdExec.java
@@ -0,0 +1,44 @@
+package com.github.dockerjava.jaxrs1;
+
+import java.io.InputStream;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.PushImageCmd;
+import com.github.dockerjava.api.model.AuthConfig;
+import com.sun.jersey.api.client.WebResource;
+
+public class PushImageCmdExec extends AbstrDockerCmdExec implements PushImageCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(PushImageCmdExec.class);
+
+ public PushImageCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected InputStream execute(PushImageCmd command) {
+ WebResource webResource = getBaseResource()
+ .path("/images/" + name(command) + "/push")
+ .build();
+
+ final String registryAuth = registryAuth(command.getAuthConfig());
+ LOGGER.trace("POST: {}", webResource);
+ return webResource
+ .header("X-Registry-Auth", registryAuth)
+ .accept(MediaType.APPLICATION_JSON)
+ .entity(Response.class, MediaType.APPLICATION_JSON)
+ .post(InputStream.class);
+ }
+
+ private String name(PushImageCmd command) {
+ String name = command.getName();
+ AuthConfig authConfig = command.getAuthConfig();
+ return name.contains("/") ? name : authConfig.getUsername();
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/RemoveContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/RemoveContainerCmdExec.java
new file mode 100644
index 000000000..6ef991657
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/RemoveContainerCmdExec.java
@@ -0,0 +1,33 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.RemoveContainerCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class RemoveContainerCmdExec extends AbstrDockerCmdExec implements RemoveContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(RemoveContainerCmdExec.class);
+
+ public RemoveContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Void execute(RemoveContainerCmd command) {
+ WebResource webResource = getBaseResource()
+ .path("/containers/" + command.getContainerId())
+ .queryParam("v", command.hasRemoveVolumesEnabled() ? "1" : "0")
+ .queryParam("force", command.hasForceEnabled() ? "1" : "0")
+ .build();
+
+ LOGGER.trace("DELETE: {}", webResource);
+ webResource.accept(MediaType.APPLICATION_JSON).delete();
+
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/RemoveImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/RemoveImageCmdExec.java
new file mode 100644
index 000000000..fa37eeb3e
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/RemoveImageCmdExec.java
@@ -0,0 +1,33 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.Response;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.RemoveImageCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class RemoveImageCmdExec extends AbstrDockerCmdExec implements RemoveImageCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(RemoveImageCmdExec.class);
+
+ public RemoveImageCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Void execute(RemoveImageCmd command) {
+ WebResource webResource = getBaseResource()
+ .path("/images/" + command.getImageId())
+ .queryParam("force", command.hasForceEnabled() ? "1" : "0")
+ .queryParam("noprune", command.hasNoPruneEnabled() ? "1" : "0")
+ .build();
+
+ LOGGER.trace("DELETE: {}", webResource);
+ webResource.delete(Response.class);
+
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/RestartContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/RestartContainerCmdExec.java
new file mode 100644
index 000000000..8208708c7
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/RestartContainerCmdExec.java
@@ -0,0 +1,34 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.RestartContainerCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class RestartContainerCmdExec extends AbstrDockerCmdExec implements RestartContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(RestartContainerCmdExec.class);
+
+ public RestartContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Void execute(RestartContainerCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/containers/{id}/restart", command.getContainerId())
+ .queryParam("t", String.valueOf(command.getTimeout()))
+ .build();
+
+ LOGGER.trace("POST: {}", webResource);
+ webResource.accept(MediaType.APPLICATION_JSON)
+ .entity(null, MediaType.APPLICATION_JSON_TYPE)
+ .post();
+
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/SearchImagesCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/SearchImagesCmdExec.java
new file mode 100644
index 000000000..14f79e0f6
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/SearchImagesCmdExec.java
@@ -0,0 +1,35 @@
+package com.github.dockerjava.jaxrs1;
+
+import java.util.List;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.SearchImagesCmd;
+import com.github.dockerjava.api.model.SearchItem;
+import com.sun.jersey.api.client.GenericType;
+import com.sun.jersey.api.client.WebResource;
+
+public class SearchImagesCmdExec extends AbstrDockerCmdExec> implements SearchImagesCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(SearchImagesCmdExec.class);
+
+ public SearchImagesCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected List execute(SearchImagesCmd command) {
+ WebResource webResource = getBaseResource()
+ .path("/images/search")
+ .queryParam("term", command.getTerm())
+ .build();
+
+ LOGGER.trace("GET: {}", webResource);
+ return webResource.accept(MediaType.APPLICATION_JSON)
+ .get(new GenericType>() {});
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/StartContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/StartContainerCmdExec.java
new file mode 100644
index 000000000..be97e8971
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/StartContainerCmdExec.java
@@ -0,0 +1,48 @@
+package com.github.dockerjava.jaxrs1;
+
+import java.io.ByteArrayInputStream;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.dockerjava.api.BadRequestException;
+import com.github.dockerjava.api.command.StartContainerCmd;
+import com.sun.jersey.api.client.WebResource;
+import com.sun.jersey.api.client.WebResource.Builder;
+
+public class StartContainerCmdExec extends AbstrDockerCmdExec implements StartContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(StartContainerCmdExec.class);
+
+ public StartContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Void execute(StartContainerCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/containers/{id}/start", command.getContainerId())
+ .build();
+
+ Builder builder = webResource.accept(MediaType.APPLICATION_JSON);
+ if (!command.useExistingConfig()) {
+ // Workaround for Docker issue 6231. This avoids the use of chunked encoding.
+ ObjectMapper mapper = new ObjectMapper();
+ ByteArrayInputStream bais;
+ try {
+ bais = new ByteArrayInputStream(mapper.writeValueAsBytes(command));
+ } catch (JsonProcessingException jpe) {
+ throw new BadRequestException("Unable to serialize start command", jpe);
+ }
+ builder = builder.entity(bais, MediaType.APPLICATION_JSON);
+ }
+ LOGGER.trace("POST: {}", webResource);
+ builder.post();
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/StopContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/StopContainerCmdExec.java
new file mode 100644
index 000000000..c5e58e082
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/StopContainerCmdExec.java
@@ -0,0 +1,33 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.StopContainerCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class StopContainerCmdExec extends AbstrDockerCmdExec implements StopContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(StopContainerCmdExec.class);
+
+ public StopContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Void execute(StopContainerCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/containers/{id}/stop", command.getContainerId())
+ .queryParam("t", String.valueOf(command.getTimeout()))
+ .build();
+
+ LOGGER.trace("POST: {}", webResource);
+ webResource.accept(MediaType.APPLICATION_JSON)
+ .entity(null, MediaType.APPLICATION_JSON)
+ .post();
+
+ return null;
+ }
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/TagImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/TagImageCmdExec.java
new file mode 100644
index 000000000..13850bbc9
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/TagImageCmdExec.java
@@ -0,0 +1,37 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.TagImageCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class TagImageCmdExec extends AbstrDockerCmdExec implements TagImageCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(TagImageCmdExec.class);
+
+ public TagImageCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Void execute(TagImageCmd command) {
+ WebResource webResource = getBaseResource()
+ .path("/images/" + command.getImageId() + "/tag")
+ .queryParam("repo", command.getRepository())
+ .queryParam("tag", command.getTag())
+ .queryParam("force", command.hasForceEnabled() ? "1" : "0")
+ .build();
+
+ LOGGER.trace("POST: {}", webResource);
+ webResource.entity(null, MediaType.APPLICATION_JSON)
+ .post();;
+ return null;
+ }
+
+
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/TopContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/TopContainerCmdExec.java
new file mode 100644
index 000000000..99435a0e9
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/TopContainerCmdExec.java
@@ -0,0 +1,34 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.TopContainerCmd;
+import com.github.dockerjava.api.command.TopContainerResponse;
+import com.sun.jersey.api.client.WebResource;
+
+public class TopContainerCmdExec extends AbstrDockerCmdExec implements TopContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(TopContainerCmdExec.class);
+
+ public TopContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected TopContainerResponse execute(TopContainerCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/containers/{id}/top", command.getContainerId())
+ .build();
+
+ if(!StringUtils.isEmpty(command.getPsArgs()))
+ webResource = webResource.queryParam("ps_args", command.getPsArgs());
+
+ LOGGER.trace("GET: {}", webResource);
+ return webResource.accept(MediaType.APPLICATION_JSON).get(TopContainerResponse.class);
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/UnpauseContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/UnpauseContainerCmdExec.java
new file mode 100644
index 000000000..b0dca7184
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/UnpauseContainerCmdExec.java
@@ -0,0 +1,34 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.UnpauseContainerCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class UnpauseContainerCmdExec extends AbstrDockerCmdExec implements UnpauseContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(UnpauseContainerCmdExec.class);
+
+ public UnpauseContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Void execute(UnpauseContainerCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/containers/{id}/unpause", command.getContainerId())
+ .build();
+
+ LOGGER.trace("POST: {}", webResource);
+ webResource.accept(MediaType.APPLICATION_JSON)
+ .entity(Response.class, MediaType.APPLICATION_JSON)
+ .post();
+
+ return null;
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/VersionCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/VersionCmdExec.java
new file mode 100644
index 000000000..50548d847
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/VersionCmdExec.java
@@ -0,0 +1,30 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.github.dockerjava.api.command.VersionCmd;
+import com.github.dockerjava.api.model.Version;
+import com.sun.jersey.api.client.WebResource;
+
+public class VersionCmdExec extends AbstrDockerCmdExec implements VersionCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(VersionCmdExec.class);
+
+ public VersionCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Version execute(VersionCmd command) {
+ WebResource webResource = getBaseResource().path("/version").build();
+
+ LOGGER.trace("GET: {}", webResource);
+ return webResource.accept(MediaType.APPLICATION_JSON)
+ .get(Version.class);
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/WaitContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs1/WaitContainerCmdExec.java
new file mode 100644
index 000000000..c712e8064
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/WaitContainerCmdExec.java
@@ -0,0 +1,35 @@
+package com.github.dockerjava.jaxrs1;
+
+import javax.ws.rs.core.MediaType;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.github.dockerjava.api.command.WaitContainerCmd;
+import com.sun.jersey.api.client.WebResource;
+
+public class WaitContainerCmdExec extends AbstrDockerCmdExec implements WaitContainerCmd.Exec {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(WaitContainerCmdExec.class);
+
+ public WaitContainerCmdExec(WebResource baseResource) {
+ super(baseResource);
+ }
+
+ @Override
+ protected Integer execute(WaitContainerCmd command) {
+ WebResource webResource = getBaseResource()
+ .resolveTemplate("/containers/{id}/wait", command.getContainerId())
+ .build();
+
+ LOGGER.trace("POST: {}", webResource);
+ ObjectNode ObjectNode = webResource.accept(MediaType.APPLICATION_JSON)
+ .entity(null, MediaType.TEXT_PLAIN)
+ .post(ObjectNode.class);
+
+ return ObjectNode.get("StatusCode").asInt();
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/util/JsonClientFilter.java b/src/main/java/com/github/dockerjava/jaxrs1/util/JsonClientFilter.java
new file mode 100644
index 000000000..09eccfd89
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/util/JsonClientFilter.java
@@ -0,0 +1,27 @@
+package com.github.dockerjava.jaxrs1.util;
+
+
+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.ClientFilter;
+
+/**
+ *
+ * @author Konstantin Pelykh (kpelykh@gmail.com)
+ *
+ */
+public class JsonClientFilter extends ClientFilter {
+
+ @Override
+ public ClientResponse handle(ClientRequest cr) throws ClientHandlerException {
+ // 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);
+ }
+ return resp;
+ }
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/util/ResponseStatusExceptionFilter.java b/src/main/java/com/github/dockerjava/jaxrs1/util/ResponseStatusExceptionFilter.java
new file mode 100644
index 000000000..8186c6fda
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/util/ResponseStatusExceptionFilter.java
@@ -0,0 +1,104 @@
+package com.github.dockerjava.jaxrs1.util;
+
+import java.io.EOFException;
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+import javax.ws.rs.core.MediaType;
+
+import org.apache.commons.io.IOUtils;
+
+import com.github.dockerjava.api.BadRequestException;
+import com.github.dockerjava.api.ConflictException;
+import com.github.dockerjava.api.DockerException;
+import com.github.dockerjava.api.InternalServerErrorException;
+import com.github.dockerjava.api.NotAcceptableException;
+import com.github.dockerjava.api.NotFoundException;
+import com.github.dockerjava.api.NotModifiedException;
+import com.github.dockerjava.api.UnauthorizedException;
+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.ClientFilter;
+
+/**
+ * This {@link ClientResponseFilter} implementation detects http status codes and throws {@link DockerException}s
+ *
+ * @author marcus
+ *
+ */
+public class ResponseStatusExceptionFilter extends ClientFilter {
+
+
+ @Override
+ public ClientResponse handle(ClientRequest cr) throws ClientHandlerException {
+ // Call the next client handler in the filter chain
+ ClientResponse resp = getNext().handle(cr);
+ try {
+ filter(resp);
+ } catch (Exception e) {
+ throw new ClientHandlerException(e);
+ }
+ return resp;
+ }
+
+ public void filter(ClientResponse response) throws IOException {
+ int status = response.getStatus();
+ switch (status) {
+ case 200:
+ case 201:
+ case 204:
+ return;
+ case 304:
+ throw new NotModifiedException(getBodyAsMessage(response));
+ case 400:
+ throw new BadRequestException(getBodyAsMessage(response));
+ case 401:
+ throw new UnauthorizedException(getBodyAsMessage(response));
+ case 404:
+ throw new NotFoundException(getBodyAsMessage(response));
+ case 406:
+ throw new NotAcceptableException(getBodyAsMessage(response));
+ case 409:
+ throw new ConflictException(getBodyAsMessage(response));
+ case 500:
+ throw new InternalServerErrorException(getBodyAsMessage(response));
+ default:
+ throw new DockerException(getBodyAsMessage(response), status);
+ }
+ }
+
+ public String getBodyAsMessage(ClientResponse response) throws IOException {
+ if (response.hasEntity()) {
+ int contentLength = response.getLength();
+ if (contentLength != -1) {
+ byte[] buffer = new byte[contentLength];
+ try {
+ IOUtils.readFully(response.getEntityInputStream(), buffer);
+ }
+ catch (EOFException e) {
+ return null;
+ }
+ Charset charset = null;
+ MediaType mediaType = response.getType();
+ if (mediaType != null) {
+ String charsetName = mediaType.getParameters().get("charset");
+ if (charsetName != null) {
+ try {
+ charset = Charset.forName(charsetName);
+ }
+ catch (Exception e) {
+ //Do noting...
+ }
+ }
+ }
+ if (charset == null) {
+ charset = Charset.defaultCharset();
+ }
+ String message = new String(buffer, charset);
+ return message;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs1/util/SelectiveLoggingFilter.java b/src/main/java/com/github/dockerjava/jaxrs1/util/SelectiveLoggingFilter.java
new file mode 100644
index 000000000..1826808f0
--- /dev/null
+++ b/src/main/java/com/github/dockerjava/jaxrs1/util/SelectiveLoggingFilter.java
@@ -0,0 +1,47 @@
+package com.github.dockerjava.jaxrs1.util;
+
+import java.util.Set;
+
+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;
+
+/**
+ * A version of the logging filter that will avoid trying to log entities which can cause
+ * issues with the console.
+ *
+ * @author sfitts
+ *
+ */
+public class SelectiveLoggingFilter extends com.sun.jersey.api.client.filter.LoggingFilter {
+
+
+ private static final Set SKIPPED_CONTENT = ImmutableSet.builder()
+ .add(MediaType.APPLICATION_OCTET_STREAM)
+ .add("application/tar")
+ .build();
+
+ @Override
+ public ClientResponse handle(ClientRequest request) throws ClientHandlerException {
+ // 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);
+ }
+
+ // Do what we normally would
+ return super.handle(request);
+ }
+
+}
diff --git a/src/main/java/com/github/dockerjava/jaxrs/AbstrDockerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/AbstrDockerCmdExec.java
similarity index 97%
rename from src/main/java/com/github/dockerjava/jaxrs/AbstrDockerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/AbstrDockerCmdExec.java
index 34414d73e..35e1fe7c4 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/AbstrDockerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/AbstrDockerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import java.io.IOException;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/AttachContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/AttachContainerCmdExec.java
similarity index 97%
rename from src/main/java/com/github/dockerjava/jaxrs/AttachContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/AttachContainerCmdExec.java
index 5ed84c341..7392bb1f3 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/AttachContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/AttachContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/AuthCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/AuthCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/AuthCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/AuthCmdExec.java
index d73487bb8..3b3a52969 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/AuthCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/AuthCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/BuildImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/BuildImageCmdExec.java
similarity index 97%
rename from src/main/java/com/github/dockerjava/jaxrs/BuildImageCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/BuildImageCmdExec.java
index 71d3f902c..9d4203cbe 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/BuildImageCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/BuildImageCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/CommitCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/CommitCmdExec.java
similarity index 97%
rename from src/main/java/com/github/dockerjava/jaxrs/CommitCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/CommitCmdExec.java
index f1f4fe33a..2ffe2fdda 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/CommitCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/CommitCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/ContainerDiffCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/ContainerDiffCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/ContainerDiffCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/ContainerDiffCmdExec.java
index 0a657ed90..ec02a3abd 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/ContainerDiffCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/ContainerDiffCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import java.util.List;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/CopyFileFromContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/CopyFileFromContainerCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/CopyFileFromContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/CopyFileFromContainerCmdExec.java
index 27b4d5bd6..de15a4565 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/CopyFileFromContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/CopyFileFromContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/CreateContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/CreateContainerCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/CreateContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/CreateContainerCmdExec.java
index 26dc25cd2..a314b8963 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/CreateContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/CreateContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/CreateImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/CreateImageCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/CreateImageCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/CreateImageCmdExec.java
index 4c7bae8b0..c5da5c326 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/CreateImageCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/CreateImageCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java b/src/main/java/com/github/dockerjava/jaxrs2/DockerCmdExecFactoryImpl.java
similarity index 97%
rename from src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java
rename to src/main/java/com/github/dockerjava/jaxrs2/DockerCmdExecFactoryImpl.java
index 74d3073f0..9181c2192 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/DockerCmdExecFactoryImpl.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/DockerCmdExecFactoryImpl.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import java.io.IOException;
import java.util.logging.Logger;
@@ -8,6 +8,7 @@
import javax.ws.rs.client.WebTarget;
import com.github.dockerjava.api.command.EventsCmd;
+
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.ClientProperties;
import org.glassfish.jersey.CommonProperties;
@@ -45,9 +46,9 @@
import com.github.dockerjava.api.command.VersionCmd;
import com.github.dockerjava.api.command.WaitContainerCmd;
import com.github.dockerjava.core.DockerClientConfig;
-import com.github.dockerjava.jaxrs.util.JsonClientFilter;
-import com.github.dockerjava.jaxrs.util.ResponseStatusExceptionFilter;
-import com.github.dockerjava.jaxrs.util.SelectiveLoggingFilter;
+import com.github.dockerjava.jaxrs2.util.JsonClientFilter;
+import com.github.dockerjava.jaxrs2.util.ResponseStatusExceptionFilter;
+import com.github.dockerjava.jaxrs2.util.SelectiveLoggingFilter;
import com.google.common.base.Preconditions;
public class DockerCmdExecFactoryImpl implements DockerCmdExecFactory {
diff --git a/src/main/java/com/github/dockerjava/jaxrs/EventsCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/EventsCmdExec.java
similarity index 98%
rename from src/main/java/com/github/dockerjava/jaxrs/EventsCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/EventsCmdExec.java
index 545d7db98..8cce112a9 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/EventsCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/EventsCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import java.io.InputStream;
import java.util.concurrent.Callable;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/InfoCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/InfoCmdExec.java
similarity index 95%
rename from src/main/java/com/github/dockerjava/jaxrs/InfoCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/InfoCmdExec.java
index aff72fab2..29b390902 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/InfoCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/InfoCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/InspectContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/InspectContainerCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/InspectContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/InspectContainerCmdExec.java
index 664a67c59..c93d1c343 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/InspectContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/InspectContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/InspectImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/InspectImageCmdExec.java
similarity index 95%
rename from src/main/java/com/github/dockerjava/jaxrs/InspectImageCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/InspectImageCmdExec.java
index 784266091..b73c95e75 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/InspectImageCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/InspectImageCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/KillContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/KillContainerCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/KillContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/KillContainerCmdExec.java
index 28496edc9..1b9e80729 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/KillContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/KillContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/ListContainersCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/ListContainersCmdExec.java
similarity index 97%
rename from src/main/java/com/github/dockerjava/jaxrs/ListContainersCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/ListContainersCmdExec.java
index 018db9a56..eae46ffb3 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/ListContainersCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/ListContainersCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import java.util.List;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/ListImagesCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/ListImagesCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/ListImagesCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/ListImagesCmdExec.java
index 5a000a294..520aa7551 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/ListImagesCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/ListImagesCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import java.util.List;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/LogContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/LogContainerCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/LogContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/LogContainerCmdExec.java
index 46d259424..21fa9f0e8 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/LogContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/LogContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import java.io.InputStream;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/PauseContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/PauseContainerCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/PauseContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/PauseContainerCmdExec.java
index ee84a3209..4306b92bf 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/PauseContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/PauseContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/PingCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/PingCmdExec.java
similarity index 94%
rename from src/main/java/com/github/dockerjava/jaxrs/PingCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/PingCmdExec.java
index abfb0f4cc..14c24b8aa 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/PingCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/PingCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/PullImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/PullImageCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/PullImageCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/PullImageCmdExec.java
index 4ac190be4..f1b44fac7 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/PullImageCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/PullImageCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/PushImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/PushImageCmdExec.java
similarity index 97%
rename from src/main/java/com/github/dockerjava/jaxrs/PushImageCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/PushImageCmdExec.java
index 8d5aabefb..dbad50541 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/PushImageCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/PushImageCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/RemoveContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/RemoveContainerCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/RemoveContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/RemoveContainerCmdExec.java
index 7f45bdda2..7f40d561d 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/RemoveContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/RemoveContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/RemoveImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/RemoveImageCmdExec.java
similarity index 95%
rename from src/main/java/com/github/dockerjava/jaxrs/RemoveImageCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/RemoveImageCmdExec.java
index 54fb327b4..80c391aa2 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/RemoveImageCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/RemoveImageCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/RestartContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/RestartContainerCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/RestartContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/RestartContainerCmdExec.java
index fe544f134..7a49bcc4c 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/RestartContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/RestartContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/SearchImagesCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/SearchImagesCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/SearchImagesCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/SearchImagesCmdExec.java
index a7b6ddbc2..fd395fa1d 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/SearchImagesCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/SearchImagesCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import java.util.List;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/StartContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/StartContainerCmdExec.java
similarity index 95%
rename from src/main/java/com/github/dockerjava/jaxrs/StartContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/StartContainerCmdExec.java
index 8a2c09a44..196bc11d9 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/StartContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/StartContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/StopContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/StopContainerCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/StopContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/StopContainerCmdExec.java
index 337c71b2e..34a9c7d45 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/StopContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/StopContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/TagImageCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/TagImageCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/TagImageCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/TagImageCmdExec.java
index d8545e339..3f3e0e896 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/TagImageCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/TagImageCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/TopContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/TopContainerCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/TopContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/TopContainerCmdExec.java
index 55c431ccd..c05ae3f37 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/TopContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/TopContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/UnpauseContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/UnpauseContainerCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/UnpauseContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/UnpauseContainerCmdExec.java
index 361f9adcf..99b50436a 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/UnpauseContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/UnpauseContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/VersionCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/VersionCmdExec.java
similarity index 95%
rename from src/main/java/com/github/dockerjava/jaxrs/VersionCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/VersionCmdExec.java
index 9b4ac817a..71203fd19 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/VersionCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/VersionCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/WaitContainerCmdExec.java b/src/main/java/com/github/dockerjava/jaxrs2/WaitContainerCmdExec.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/WaitContainerCmdExec.java
rename to src/main/java/com/github/dockerjava/jaxrs2/WaitContainerCmdExec.java
index e6f95586c..4dc7a5108 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/WaitContainerCmdExec.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/WaitContainerCmdExec.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs;
+package com.github.dockerjava.jaxrs2;
import static javax.ws.rs.client.Entity.entity;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/util/JsonClientFilter.java b/src/main/java/com/github/dockerjava/jaxrs2/util/JsonClientFilter.java
similarity index 95%
rename from src/main/java/com/github/dockerjava/jaxrs/util/JsonClientFilter.java
rename to src/main/java/com/github/dockerjava/jaxrs2/util/JsonClientFilter.java
index e0eaa4a4a..3c19653ad 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/util/JsonClientFilter.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/util/JsonClientFilter.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs.util;
+package com.github.dockerjava.jaxrs2.util;
import javax.ws.rs.client.ClientRequestContext;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/util/ResponseStatusExceptionFilter.java b/src/main/java/com/github/dockerjava/jaxrs2/util/ResponseStatusExceptionFilter.java
similarity index 98%
rename from src/main/java/com/github/dockerjava/jaxrs/util/ResponseStatusExceptionFilter.java
rename to src/main/java/com/github/dockerjava/jaxrs2/util/ResponseStatusExceptionFilter.java
index 61d97f93b..25d0e38c6 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/util/ResponseStatusExceptionFilter.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/util/ResponseStatusExceptionFilter.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs.util;
+package com.github.dockerjava.jaxrs2.util;
import java.io.EOFException;
import java.io.IOException;
diff --git a/src/main/java/com/github/dockerjava/jaxrs/util/SelectiveLoggingFilter.java b/src/main/java/com/github/dockerjava/jaxrs2/util/SelectiveLoggingFilter.java
similarity index 96%
rename from src/main/java/com/github/dockerjava/jaxrs/util/SelectiveLoggingFilter.java
rename to src/main/java/com/github/dockerjava/jaxrs2/util/SelectiveLoggingFilter.java
index 7f7e06c73..1682f1d9b 100644
--- a/src/main/java/com/github/dockerjava/jaxrs/util/SelectiveLoggingFilter.java
+++ b/src/main/java/com/github/dockerjava/jaxrs2/util/SelectiveLoggingFilter.java
@@ -1,4 +1,4 @@
-package com.github.dockerjava.jaxrs.util;
+package com.github.dockerjava.jaxrs2.util;
import java.io.IOException;
import java.util.Set;
diff --git a/src/main/resources/META-INF/services/com.github.dockerjava.api.command.DockerCmdExecFactory b/src/main/resources/META-INF/services/com.github.dockerjava.api.command.DockerCmdExecFactory
index f0686bc9f..0fbd6fcd3 100644
--- a/src/main/resources/META-INF/services/com.github.dockerjava.api.command.DockerCmdExecFactory
+++ b/src/main/resources/META-INF/services/com.github.dockerjava.api.command.DockerCmdExecFactory
@@ -1 +1 @@
-com.github.dockerjava.jaxrs.DockerCmdExecFactoryImpl
\ No newline at end of file
+com.github.dockerjava.jaxrs1.DockerCmdExecFactoryImpl
\ No newline at end of file
diff --git a/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java
index 353fea12d..6ff40d35a 100644
--- a/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java
+++ b/src/test/java/com/github/dockerjava/core/command/BuildImageCmdImplTest.java
@@ -14,7 +14,6 @@
import java.lang.reflect.Method;
import org.apache.commons.lang.StringUtils;
-
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterTest;
diff --git a/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java b/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java
index a45333326..9f43f99cd 100644
--- a/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java
+++ b/src/test/java/com/github/dockerjava/core/command/StartContainerCmdImplTest.java
@@ -17,6 +17,7 @@
import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.command.InspectContainerResponse;
import com.github.dockerjava.api.model.*;
+import com.github.dockerjava.client.AbstractDockerClientTest;
import org.testng.ITestResult;
import org.testng.annotations.AfterMethod;
@@ -25,8 +26,6 @@
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
-import com.github.dockerjava.client.AbstractDockerClientTest;
-
public class StartContainerCmdImplTest extends AbstractDockerClientTest {