in wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java [1016:1121]
private void fillInputData(int wait, InputData inputData)
throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException {
Resource resource = inputData.getResource();
String url = buildUrl(resource);
HttpGet getMethod = new HttpGet(url);
long timestamp = resource.getLastModified();
if (timestamp > 0) {
SimpleDateFormat fmt = new SimpleDateFormat("EEE, dd-MMM-yy HH:mm:ss zzz", Locale.US);
fmt.setTimeZone(GMT_TIME_ZONE);
Header hdr = new BasicHeader("If-Modified-Since", fmt.format(new Date(timestamp)));
fireTransferDebug("sending ==> " + hdr + "(" + timestamp + ")");
getMethod.addHeader(hdr);
}
try {
CloseableHttpResponse response = execute(getMethod);
closeable = response;
fireTransferDebug(formatTransferDebugMessage(
url,
response.getStatusLine().getStatusCode(),
response.getStatusLine().getReasonPhrase(),
getProxyInfo()));
int statusCode = response.getStatusLine().getStatusCode();
switch (statusCode) {
case HttpStatus.SC_OK:
break;
case HttpStatus.SC_NOT_MODIFIED:
// return, leaving last modified set to original value so getIfNewer should return unmodified
return;
// TODO Move 401/407 to AuthenticationException after WAGON-587
case HttpStatus.SC_FORBIDDEN:
case HttpStatus.SC_UNAUTHORIZED:
case HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED:
EntityUtils.consumeQuietly(response.getEntity());
fireSessionConnectionRefused();
throw new AuthorizationException(formatAuthorizationMessage(
url,
response.getStatusLine().getStatusCode(),
response.getStatusLine().getReasonPhrase(),
getProxyInfo()));
case HttpStatus.SC_NOT_FOUND:
case HttpStatus.SC_GONE:
EntityUtils.consumeQuietly(response.getEntity());
throw new ResourceDoesNotExistException(formatResourceDoesNotExistMessage(
url,
response.getStatusLine().getStatusCode(),
response.getStatusLine().getReasonPhrase(),
getProxyInfo()));
case SC_TOO_MANY_REQUESTS:
EntityUtils.consumeQuietly(response.getEntity());
fillInputData(backoff(wait, url), inputData);
break;
// add more entries here
default:
EntityUtils.consumeQuietly(response.getEntity());
cleanupGetTransfer(resource);
TransferFailedException e = new TransferFailedException(formatTransferFailedMessage(
url,
response.getStatusLine().getStatusCode(),
response.getStatusLine().getReasonPhrase(),
getProxyInfo()));
fireTransferError(resource, e, TransferEvent.REQUEST_GET);
throw e;
}
Header contentLengthHeader = response.getFirstHeader("Content-Length");
if (contentLengthHeader != null) {
try {
long contentLength = Long.parseLong(contentLengthHeader.getValue());
resource.setContentLength(contentLength);
} catch (NumberFormatException e) {
fireTransferDebug(
"error parsing content length header '" + contentLengthHeader.getValue() + "' " + e);
}
}
Header lastModifiedHeader = response.getFirstHeader("Last-Modified");
if (lastModifiedHeader != null) {
Date lastModified = DateUtils.parseDate(lastModifiedHeader.getValue());
if (lastModified != null) {
resource.setLastModified(lastModified.getTime());
fireTransferDebug(
"last-modified = " + lastModifiedHeader.getValue() + " (" + lastModified.getTime() + ")");
}
}
HttpEntity entity = response.getEntity();
if (entity != null) {
inputData.setInputStream(entity.getContent());
}
} catch (IOException | HttpException | InterruptedException e) {
fireTransferError(resource, e, TransferEvent.REQUEST_GET);
throw new TransferFailedException(formatTransferFailedMessage(url, getProxyInfo()), e);
}
}