in wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java [111:217]
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 ) );
}
}
}