diff --git a/httpclient-jetty/src/main/java/io/fabric8/kubernetes/client/jetty/JettyAsyncResponseListener.java b/httpclient-jetty/src/main/java/io/fabric8/kubernetes/client/jetty/JettyAsyncResponseListener.java index 2ee8ad50c0c..ba09dc235ee 100644 --- a/httpclient-jetty/src/main/java/io/fabric8/kubernetes/client/jetty/JettyAsyncResponseListener.java +++ b/httpclient-jetty/src/main/java/io/fabric8/kubernetes/client/jetty/JettyAsyncResponseListener.java @@ -94,7 +94,8 @@ public void onContent(Response response, LongConsumer demand, ByteBuffer content this.demand.complete(demand); } try { - bodyConsumer.consume(process(response, content), this); + // we must clone as the buffer can be reused after the call to succeeded + bodyConsumer.consume(process(response, clone(content)), this); callback.succeeded(); } catch (Exception e) { callback.failed(e); @@ -102,4 +103,11 @@ public void onContent(Response response, LongConsumer demand, ByteBuffer content } protected abstract T process(Response response, ByteBuffer content); + + public static ByteBuffer clone(ByteBuffer original) { + ByteBuffer clone = ByteBuffer.allocate(original.remaining()); + clone.put(original); + clone.flip(); + return clone; + } }