Author: struberg Date: Mon Jun 13 22:50:26 2011 New Revision: 1135334 URL: http://svn.apache.org/viewvc?rev=1135334&view=rev Log: WAGON-314 manually handle PERM_MOVE and TEMP_MOVE in wagon-http-lightweight
Modified: maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java Modified: maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java?rev=1135334&r1=1135333&r2=1135334&view=diff ============================================================================== --- maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java (original) +++ maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java Mon Jun 13 22:50:26 2011 @@ -42,6 +42,7 @@ import java.net.MalformedURLException; import java.net.PasswordAuthentication; import java.net.URL; import java.net.URLConnection; +import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Properties; @@ -65,7 +66,7 @@ public class LightweightHttpWagon private HttpURLConnection putConnection; - public static final int MAX_REDIRECTS = 5; + public static final int MAX_REDIRECTS = 10; /** * Whether to use any proxy cache or not. @@ -103,35 +104,53 @@ public class LightweightHttpWagon Resource resource = inputData.getResource(); try { - int redirectCount = 0; - URL url = new URL( buildUrl( resource.getName() ) ); - HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); - urlConnection.setRequestProperty( "Accept-Encoding", "gzip" ); - if ( !useCache ) + List<String> visitedUrls = new ArrayList<String>(); + String visitingUrl = buildUrl( resource.getName() ); + + for ( int redirectCount = 0; redirectCount < MAX_REDIRECTS; redirectCount++ ) { - urlConnection.setRequestProperty( "Pragma", "no-cache" ); - } + if ( visitedUrls.contains( visitingUrl ) ) + { + throw new TransferFailedException( "Cyclic http redirect detected. Aborting! " + visitingUrl ); + } + visitedUrls.add( visitingUrl ); - addHeaders( urlConnection ); + URL url = new URL( visitingUrl ); + HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); + urlConnection.setRequestProperty( "Accept-Encoding", "gzip" ); + if ( !useCache ) + { + urlConnection.setRequestProperty( "Pragma", "no-cache" ); + } - // TODO: handle all response codes - int responseCode = urlConnection.getResponseCode(); - if ( responseCode == HttpURLConnection.HTTP_FORBIDDEN - || responseCode == HttpURLConnection.HTTP_UNAUTHORIZED ) - { - throw new AuthorizationException( "Access denied to: " + buildUrl( resource.getName() ) ); - } + addHeaders( urlConnection ); - InputStream is = urlConnection.getInputStream(); - String contentEncoding = urlConnection.getHeaderField( "Content-Encoding" ); - boolean isGZipped = contentEncoding != null && "gzip".equalsIgnoreCase( contentEncoding ); - if ( isGZipped ) - { - is = new GZIPInputStream( is ); + // TODO: handle all response codes + int responseCode = urlConnection.getResponseCode(); + if ( responseCode == HttpURLConnection.HTTP_FORBIDDEN + || responseCode == HttpURLConnection.HTTP_UNAUTHORIZED ) + { + throw new AuthorizationException( "Access denied to: " + buildUrl( resource.getName() ) ); + } + 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 ); + } + inputData.setInputStream( is ); + resource.setLastModified( urlConnection.getLastModified() ); + resource.setContentLength( urlConnection.getContentLength() ); + break; } - inputData.setInputStream( is ); - resource.setLastModified( urlConnection.getLastModified() ); - resource.setContentLength( urlConnection.getContentLength() ); } catch ( MalformedURLException e ) { Modified: maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java?rev=1135334&r1=1135333&r2=1135334&view=diff ============================================================================== --- maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java (original) +++ maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/test/java/org/apache/maven/wagon/providers/http/LightweightHttpWagonTest.java Mon Jun 13 22:50:26 2011 @@ -153,7 +153,7 @@ public class LightweightHttpWagonTest public void disabledtestHttpRedirect() throws Exception { Repository repository = new Repository( "apache.releases", - "https://repository.apache.org/service/local/repositories/releases/content/" ); + "http://repository.apache.org/service/local/repositories/releases/content/" ); Wagon wagon = getWagon();