From cc8dbea94f7de5903f5ecdbcd62b1d2071e2c91b Mon Sep 17 00:00:00 2001 From: tejksat Date: Sun, 28 Aug 2016 01:39:59 +0300 Subject: [PATCH] Fix for #670 JSON decoding disabled on /images/load command execution. --- .../dockerjava/netty/InvocationBuilder.java | 31 +++++++++++++++++++ .../netty/exec/LoadImageCmdExec.java | 7 ++--- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/github/dockerjava/netty/InvocationBuilder.java b/src/main/java/com/github/dockerjava/netty/InvocationBuilder.java index 9669d6818..d76918bcb 100644 --- a/src/main/java/com/github/dockerjava/netty/InvocationBuilder.java +++ b/src/main/java/com/github/dockerjava/netty/InvocationBuilder.java @@ -69,6 +69,12 @@ public void onNext(T object) { } } + public class SkipResultCallback extends ResultCallbackTemplate, Void> { + @Override + public void onNext(Void object) { + } + } + private ChannelProvider channelProvider; private String resource; @@ -401,6 +407,31 @@ public void post(TypeReference typeReference, ResultCallback resultCal channel.pipeline().addLast(new JsonObjectDecoder()); channel.pipeline().addLast(jsonResponseHandler); + postChunkedStreamRequest(requestProvider, channel, body); + } + + public void postStream(InputStream body) { + SkipResultCallback resultCallback = new SkipResultCallback(); + + HttpRequestProvider requestProvider = httpPostRequestProvider(null); + + Channel channel = getChannel(); + + HttpResponseHandler responseHandler = new HttpResponseHandler(requestProvider, resultCallback); + + channel.pipeline().addLast(new ChunkedWriteHandler()); + channel.pipeline().addLast(responseHandler); + + postChunkedStreamRequest(requestProvider, channel, body); + + try { + resultCallback.awaitCompletion(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + private void postChunkedStreamRequest(HttpRequestProvider requestProvider, Channel channel, InputStream body) { HttpRequest request = requestProvider.getHttpRequest(resource); // don't accept FullHttpRequest here diff --git a/src/main/java/com/github/dockerjava/netty/exec/LoadImageCmdExec.java b/src/main/java/com/github/dockerjava/netty/exec/LoadImageCmdExec.java index 23581119f..30ee716a5 100644 --- a/src/main/java/com/github/dockerjava/netty/exec/LoadImageCmdExec.java +++ b/src/main/java/com/github/dockerjava/netty/exec/LoadImageCmdExec.java @@ -3,7 +3,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.fasterxml.jackson.core.type.TypeReference; import com.github.dockerjava.api.command.LoadImageCmd; import com.github.dockerjava.core.DockerClientConfig; import com.github.dockerjava.netty.WebTarget; @@ -22,8 +21,8 @@ protected Void execute(LoadImageCmd command) { WebTarget webResource = getBaseResource().path("/images/load"); LOGGER.trace("POST: {}", webResource); - return webResource.request() - .post(new TypeReference() { - }, command.getImageStream()); + webResource.request().postStream(command.getImageStream()); + + return null; } }