NegativeArraySizeException with awaitCompleted()
FrameReader:
/**
* @return A frame, or null if no more frames.
*/
public Frame readFrame() throws IOException {
if (rawStreamDetected) { // true
int read = inputStream.read(rawBuffer); // -1
return new Frame(StreamType.RAW, Arrays.copyOf(rawBuffer, read)); // Exception!
} else {
Stacktrace:
java.lang.NegativeArraySizeException
at java.util.Arrays.copyOf(Arrays.java:2271)
at com.github.dockerjava.core.command.FrameReader.readFrame(FrameReader.java:51)
at com.github.dockerjava.core.async.FrameStreamProcessor.processResponseStream(FrameStreamProcessor.java:35)
at com.github.dockerjava.jaxrs.async.AbstractCallbackNotifier.call(AbstractCallbackNotifier.java:62)
at com.github.dockerjava.jaxrs.async.AbstractCallbackNotifier.call(AbstractCallbackNotifier.java:22)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Code example:
StringBuilder stringBuilder = new StringBuilder();
final StringBuilderLogReader callback = new StringBuilderLogReader(stringBuilder);
dockerClient.logContainerCmd(containerId)
.withStdErr(true)
.withStdOut(true)
.withTailAll()
.exec(callback)
.awaitCompletion();
private static class StringBuilderLogReader extends LogContainerResultCallback {
public StringBuilder builder;
public StringBuilderLogReader(StringBuilder builder) {
this.builder = builder;
}
@Override
public void onNext(Frame item) {
builder.append(new String(item.getPayload()).trim());
super.onNext(item);
}
}