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();
 


Reply via email to