in maven-resolver-transport-apache/src/main/java/org/eclipse/aether/transport/apache/ApacheTransporter.java [652:708]
public void handle(CloseableHttpResponse response) throws IOException, TransferCancelledException {
HttpEntity entity = response.getEntity();
if (entity == null) {
entity = new ByteArrayEntity(new byte[0]);
}
long offset = 0L, length = entity.getContentLength();
Header rangeHeader = response.getFirstHeader(HttpHeaders.CONTENT_RANGE);
String range = rangeHeader != null ? rangeHeader.getValue() : null;
if (range != null) {
Matcher m = CONTENT_RANGE_PATTERN.matcher(range);
if (!m.matches()) {
throw new IOException("Invalid Content-Range header for partial download: " + range);
}
offset = Long.parseLong(m.group(1));
length = Long.parseLong(m.group(2)) + 1L;
if (offset < 0L || offset >= length || (offset > 0L && offset != task.getResumeOffset())) {
throw new IOException("Invalid Content-Range header for partial download from offset "
+ task.getResumeOffset() + ": " + range);
}
}
final boolean resume = offset > 0L;
final Path dataFile = task.getDataPath();
if (dataFile == null) {
try (InputStream is = entity.getContent()) {
utilGet(task, is, true, length, resume);
extractChecksums(response);
}
} else {
try (FileUtils.CollocatedTempFile tempFile = FileUtils.newTempFile(dataFile)) {
task.setDataPath(tempFile.getPath(), resume);
if (resume && Files.isRegularFile(dataFile)) {
try (InputStream inputStream = Files.newInputStream(dataFile)) {
Files.copy(inputStream, tempFile.getPath(), StandardCopyOption.REPLACE_EXISTING);
}
}
try (InputStream is = entity.getContent()) {
utilGet(task, is, true, length, resume);
}
tempFile.move();
} finally {
task.setDataPath(dataFile);
}
}
if (task.getDataPath() != null) {
Header lastModifiedHeader =
response.getFirstHeader(HttpHeaders.LAST_MODIFIED); // note: Wagon also does first not last
if (lastModifiedHeader != null) {
Date lastModified = DateUtils.parseDate(lastModifiedHeader.getValue());
if (lastModified != null) {
pathProcessor.setLastModified(task.getDataPath(), lastModified.getTime());
}
}
}
extractChecksums(response);
}