in wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java [107:193]
public void fillInputData(InputData inputData)
throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException {
Resource resource = inputData.getResource();
String visitingUrl = buildUrl(resource);
List<String> visitedUrls = new ArrayList<>();
for (int redirectCount = 0; redirectCount < MAX_REDIRECTS; redirectCount++) {
if (visitedUrls.contains(visitingUrl)) {
// TODO add a test for this message
throw new TransferFailedException("Cyclic http redirect detected. Aborting! " + visitingUrl);
}
visitedUrls.add(visitingUrl);
URL url = null;
try {
url = new URL(visitingUrl);
} catch (MalformedURLException e) {
// TODO add test for this
throw new ResourceDoesNotExistException("Invalid repository URL: " + e.getMessage(), e);
}
HttpURLConnection urlConnection = null;
try {
urlConnection = (HttpURLConnection) url.openConnection(this.proxy);
} catch (IOException e) {
// TODO: add test for this
String message = formatTransferFailedMessage(visitingUrl, UNKNOWN_STATUS_CODE, null, getProxyInfo());
// TODO include e.getMessage appended to main message?
throw new TransferFailedException(message, e);
}
try {
urlConnection.setRequestProperty("Accept-Encoding", "gzip,deflate");
if (!useCache) {
urlConnection.setRequestProperty("Pragma", "no-cache");
}
addHeaders(urlConnection);
// TODO: handle all response codes
int responseCode = urlConnection.getResponseCode();
String reasonPhrase = urlConnection.getResponseMessage();
// TODO Move 401/407 to AuthenticationException after WAGON-587
if (responseCode == HttpURLConnection.HTTP_FORBIDDEN
|| responseCode == HttpURLConnection.HTTP_UNAUTHORIZED
|| responseCode == HttpURLConnection.HTTP_PROXY_AUTH) {
throw new AuthorizationException(
formatAuthorizationMessage(buildUrl(resource), responseCode, reasonPhrase, getProxyInfo()));
}
if (responseCode == HttpURLConnection.HTTP_MOVED_PERM
|| responseCode == HttpURLConnection.HTTP_MOVED_TEMP) {
visitingUrl = urlConnection.getHeaderField("Location");
continue;
}
InputStream is = urlConnection.getInputStream();
String contentEncoding = urlConnection.getHeaderField("Content-Encoding");
boolean isGZipped = contentEncoding != null && "gzip".equalsIgnoreCase(contentEncoding);
if (isGZipped) {
is = new GZIPInputStream(is);
}
boolean isDeflated = contentEncoding != null && "deflate".equalsIgnoreCase(contentEncoding);
if (isDeflated) {
is = new DeflaterInputStream(is);
}
inputData.setInputStream(is);
resource.setLastModified(urlConnection.getLastModified());
resource.setContentLength(urlConnection.getContentLength());
break;
} catch (FileNotFoundException e) {
// this could be 404 Not Found or 410 Gone - we don't have access to which it was.
// TODO: 2019-10-03 url used should list all visited/redirected urls, not just the original
throw new ResourceDoesNotExistException(
formatResourceDoesNotExistMessage(
buildUrl(resource), UNKNOWN_STATUS_CODE, null, getProxyInfo()),
e);
} catch (IOException originalIOException) {
throw convertHttpUrlConnectionException(originalIOException, urlConnection, buildUrl(resource));
}
}
}