Skip to content

Commit 1020f3e

Browse files
cstamaskwin
andauthored
Set content length for PUT in JDK transport (#1798)
That got lost once we moved off from ugly temp file hack. --------- Co-authored-by: Konrad Windszus <konrad@windszus.net>
1 parent 9247aee commit 1020f3e

File tree

2 files changed

+23
-9
lines changed
  • maven-resolver-test-http/src/main/java/org/eclipse/aether/internal/test/util/http
  • maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/main/java/org/eclipse/aether/transport/jdk

2 files changed

+23
-9
lines changed

maven-resolver-test-http/src/main/java/org/eclipse/aether/internal/test/util/http/HttpTransporterTest.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -857,14 +857,18 @@ protected void testGet_ProgressCancelled() throws Exception {
857857
@Test
858858
protected void testPut_FromMemory() throws Exception {
859859
RecordingTransportListener listener = new RecordingTransportListener();
860+
String payload = "upload";
860861
PutTask task =
861-
new PutTask(URI.create("repo/file.txt")).setListener(listener).setDataString("upload");
862+
new PutTask(URI.create("repo/file.txt")).setListener(listener).setDataString(payload);
862863
transporter.put(task);
863864
assertEquals(0L, listener.getDataOffset());
864865
assertEquals(6L, listener.getDataLength());
865866
assertEquals(1, listener.getStartedCount());
866867
assertTrue(listener.getProgressedCount() > 0, "Count: " + listener.getProgressedCount());
867868
assertEquals("upload", TestFileUtils.readString(new File(repoDir, "file.txt")));
869+
assertEquals(
870+
String.valueOf(payload.getBytes(StandardCharsets.UTF_8).length),
871+
httpServer.getLogEntries().get(0).getRequestHeaders().get("Content-Length"));
868872
}
869873

870874
@Test
@@ -879,6 +883,9 @@ protected void testPut_FromFile() throws Exception {
879883
assertEquals(1, listener.getStartedCount());
880884
assertTrue(listener.getProgressedCount() > 0, "Count: " + listener.getProgressedCount());
881885
assertEquals("upload", TestFileUtils.readString(new File(repoDir, "file.txt")));
886+
assertEquals(
887+
String.valueOf(file.length()),
888+
httpServer.getLogEntries().get(0).getRequestHeaders().get("Content-Length"));
882889
}
883890

884891
@Test

maven-resolver-transport-jdk-parent/maven-resolver-transport-jdk11/src/main/java/org/eclipse/aether/transport/jdk/JdkTransporter.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -397,14 +397,21 @@ protected void implPut(PutTask task) throws Exception {
397397
}
398398
headers.forEach(request::setHeader);
399399

400-
request.PUT(HttpRequest.BodyPublishers.ofInputStream(() -> {
401-
try {
402-
return new TransportListenerNotifyingInputStream(
403-
task.newInputStream(), task.getListener(), task.getDataLength());
404-
} catch (IOException e) {
405-
throw new UncheckedIOException(e);
406-
}
407-
}));
400+
if (task.getDataLength() == 0L) {
401+
request.PUT(HttpRequest.BodyPublishers.noBody());
402+
} else {
403+
request.PUT(HttpRequest.BodyPublishers.fromPublisher(
404+
HttpRequest.BodyPublishers.ofInputStream(() -> {
405+
try {
406+
return new TransportListenerNotifyingInputStream(
407+
task.newInputStream(), task.getListener(), task.getDataLength());
408+
} catch (IOException e) {
409+
throw new UncheckedIOException(e);
410+
}
411+
}),
412+
// this adds a content-length request header
413+
task.getDataLength()));
414+
}
408415
prepare(request);
409416
try {
410417
HttpResponse<Void> response = send(request.build(), HttpResponse.BodyHandlers.discarding());

0 commit comments

Comments
 (0)