You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2011/09/22 16:27:10 UTC

svn commit: r1174159 - in /maven/wagon/trunk/wagon-providers: wagon-http-shared4/src/main/java/org/apache/maven/wagon/shared/http/ wagon-http/src/test/java/org/apache/maven/wagon/providers/http/

Author: olamy
Date: Thu Sep 22 14:27:10 2011
New Revision: 1174159

URL: http://svn.apache.org/viewvc?rev=1174159&view=rev
Log:
[WAGON-322] The HTTP Wagons should use Reason-Phrase sent in HTTP Response and use that in exception message (at least incorporate it).

Added:
    maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/ErrorWithReasonPhaseServlet.java
      - copied, changed from r1174158, maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java
    maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonReasonPhraseTest.java
Modified:
    maven/wagon/trunk/wagon-providers/wagon-http-shared4/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
    maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpsWagonTest.java
    maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/TckTest.java
    maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java

Modified: maven/wagon/trunk/wagon-providers/wagon-http-shared4/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http-shared4/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java?rev=1174159&r1=1174158&r2=1174159&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http-shared4/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http-shared4/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java Thu Sep 22 14:27:10 2011
@@ -499,7 +499,7 @@ public abstract class AbstractHttpClient
         {
             // TODO: Fix encoding...
             // url += "/" + URLEncoder.encode( parts[i], System.getProperty("file.encoding") );
-            if (!url.toString().endsWith( "/" ))
+            if ( !url.toString().endsWith( "/" ) )
             {
                 url.append( '/' );
             }
@@ -801,6 +801,19 @@ public abstract class AbstractHttpClient
 
         statusCode = response.getStatusLine().getStatusCode();
 
+        Header[] reasonPhraseHeaders = response.getHeaders( "Reason-Phrase" );
+        StringBuilder reasonPhrase = new StringBuilder();
+        boolean foundReasonPhrase = false;
+        if ( reasonPhraseHeaders != null && reasonPhraseHeaders.length > 0 )
+        {
+            reasonPhrase.append( ", Reason-Phrase: " );
+            foundReasonPhrase = true;
+            for ( Header header : reasonPhraseHeaders )
+            {
+                reasonPhrase.append( header.getValue() ).append( " " );
+            }
+        }
+
         fireTransferDebug( url + " - Status code: " + statusCode );
 
         // TODO [BP]: according to httpclient docs, really should swallow the output on error. verify if that is
@@ -816,32 +829,33 @@ public abstract class AbstractHttpClient
 
             case SC_NULL:
             {
-                TransferFailedException e = new TransferFailedException( "Failed to transfer file: " + url );
+                TransferFailedException e = new TransferFailedException(
+                    "Failed to transfer file: " + url + ( foundReasonPhrase ? reasonPhrase.toString() : "" ) );
                 fireTransferError( resource, e, TransferEvent.REQUEST_GET );
                 throw e;
             }
 
             case HttpStatus.SC_FORBIDDEN:
                 fireSessionConnectionRefused();
-                throw new AuthorizationException( "Access denied to: " + url );
+                throw new AuthorizationException( "Access denied to: " + url+ ( foundReasonPhrase ? reasonPhrase.toString() : "" ) );
 
             case HttpStatus.SC_UNAUTHORIZED:
                 fireSessionConnectionRefused();
-                throw new AuthorizationException( "Not authorized." );
+                throw new AuthorizationException( "Not authorized" + ( foundReasonPhrase ? reasonPhrase.toString() : "." ) );
 
             case HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED:
                 fireSessionConnectionRefused();
-                throw new AuthorizationException( "Not authorized by proxy." );
+                throw new AuthorizationException( "Not authorized by proxy" + ( foundReasonPhrase ? reasonPhrase.toString() : "." ) );
 
             case HttpStatus.SC_NOT_FOUND:
-                throw new ResourceDoesNotExistException( "File: " + url + " does not exist" );
+                throw new ResourceDoesNotExistException( "File: " + url + " does not exist"+ ( foundReasonPhrase ? reasonPhrase.toString() : "" ) );
 
                 // add more entries here
             default:
             {
                 cleanupGetTransfer( resource );
                 TransferFailedException e = new TransferFailedException(
-                    "Failed to transfer file: " + url + ". Return code is: " + statusCode );
+                    "Failed to transfer file: " + url + ". Return code is: " + statusCode+ ( foundReasonPhrase ? reasonPhrase.toString() : "" ) );
                 fireTransferError( resource, e, TransferEvent.REQUEST_GET );
                 throw e;
             }

Copied: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/ErrorWithReasonPhaseServlet.java (from r1174158, maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java)
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/ErrorWithReasonPhaseServlet.java?p2=maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/ErrorWithReasonPhaseServlet.java&p1=maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java&r1=1174158&r2=1174159&rev=1174159&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/ErrorWithReasonPhaseServlet.java Thu Sep 22 14:27:10 2011
@@ -19,35 +19,45 @@ package org.apache.maven.wagon.providers
  * under the License.
  */
 
-import java.io.IOException;
+import org.apache.log4j.Logger;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
-import org.apache.log4j.Logger;
+import java.io.IOException;
 
 /**
  * User: jdumay
  * Date: 24/01/2008
  * Time: 17:25:27
  */
-public class WaitForeverServlet extends HttpServlet {
+public class ErrorWithReasonPhaseServlet
+    extends HttpServlet
+{
+    public static final String REASON = "it sucks!";
 
-    private static Logger logger = Logger.getLogger( WaitForeverServlet.class );
+    private Logger logger = Logger.getLogger( ErrorWithReasonPhaseServlet.class );
 
-    public void service(HttpServletRequest request, HttpServletResponse response)
+    public void service( HttpServletRequest request, HttpServletResponse response )
         throws ServletException, IOException
     {
-        logger.info( "Calling WaitForeverServlet" );
-        try
+        if ( request.getRequestURL().toString().contains( "401" ) )
+        {
+            response.setStatus( 401 );
+        }
+        else if ( request.getRequestURL().toString().contains( "403" ) )
+        {
+            response.setStatus( 403 );
+        }
+        else if ( request.getRequestURL().toString().contains( "407" ) )
         {
-            Thread.sleep( 2000 );
+            response.setStatus( 407 );
         }
-        catch (InterruptedException e)
+        else if ( request.getRequestURL().toString().contains( "500" ) )
         {
-            //eat
+            response.setStatus( 500 );
         }
+        response.addHeader( "Reason-Phrase", REASON );
     }
 }

Added: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonReasonPhraseTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonReasonPhraseTest.java?rev=1174159&view=auto
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonReasonPhraseTest.java (added)
+++ maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonReasonPhraseTest.java Thu Sep 22 14:27:10 2011
@@ -0,0 +1,186 @@
+package org.apache.maven.wagon.providers.http;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.wagon.FileTestUtils;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.Wagon;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.repository.Repository;
+import org.mortbay.jetty.servlet.ServletHolder;
+
+import java.io.File;
+
+/**
+ * User: jdumay Date: 24/01/2008 Time: 17:17:34
+ */
+public class HttpWagonReasonPhraseTest
+    extends HttpWagonHttpServerTestCase
+{
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        ServletHolder servlets = new ServletHolder( new ErrorWithReasonPhaseServlet() );
+        context.addServlet( servlets, "/*" );
+        startServer();
+    }
+
+    public void testGetReasonPhase401()
+        throws Exception
+    {
+        Exception thrown = null;
+
+        try
+        {
+            Wagon wagon = getWagon();
+
+            Repository testRepository = new Repository();
+            testRepository.setUrl( "http://localhost:" + httpServerPort );
+
+            wagon.connect( testRepository );
+
+            File destFile = FileTestUtils.createUniqueFile( getName(), getName() );
+            destFile.deleteOnExit();
+
+            wagon.get( "/401", destFile );
+
+            wagon.disconnect();
+        }
+        catch ( Exception e )
+        {
+            thrown = e;
+        }
+        finally
+        {
+            stopServer();
+        }
+
+        assertNotNull( thrown );
+        assertEquals( AuthorizationException.class, thrown.getClass() );
+        assertTrue( thrown.getMessage().contains( ErrorWithReasonPhaseServlet.REASON ) );
+    }
+
+    public void testGetReasonPhase403()
+        throws Exception
+    {
+        Exception thrown = null;
+
+        try
+        {
+            Wagon wagon = getWagon();
+
+            Repository testRepository = new Repository();
+            testRepository.setUrl( "http://localhost:" + httpServerPort );
+
+            wagon.connect( testRepository );
+
+            File destFile = FileTestUtils.createUniqueFile( getName(), getName() );
+            destFile.deleteOnExit();
+
+            wagon.get( "/403", destFile );
+
+            wagon.disconnect();
+        }
+        catch ( Exception e )
+        {
+            thrown = e;
+        }
+        finally
+        {
+            stopServer();
+        }
+
+        assertNotNull( thrown );
+        assertEquals( AuthorizationException.class, thrown.getClass() );
+        assertTrue( thrown.getMessage().contains( ErrorWithReasonPhaseServlet.REASON ) );
+    }
+
+
+    public void testGetReasonPhase407()
+        throws Exception
+    {
+        Exception thrown = null;
+
+        try
+        {
+            Wagon wagon = getWagon();
+
+            Repository testRepository = new Repository();
+            testRepository.setUrl( "http://localhost:" + httpServerPort );
+
+            wagon.connect( testRepository );
+
+            File destFile = FileTestUtils.createUniqueFile( getName(), getName() );
+            destFile.deleteOnExit();
+
+            wagon.get( "/407", destFile );
+
+            wagon.disconnect();
+        }
+        catch ( Exception e )
+        {
+            thrown = e;
+        }
+        finally
+        {
+            stopServer();
+        }
+
+        assertNotNull( thrown );
+        assertEquals( AuthorizationException.class, thrown.getClass() );
+        assertTrue( thrown.getMessage().contains( ErrorWithReasonPhaseServlet.REASON ) );
+    }
+
+    public void testGetReasonPhase500()
+        throws Exception
+    {
+        Exception thrown = null;
+
+        try
+        {
+            Wagon wagon = getWagon();
+
+            Repository testRepository = new Repository();
+            testRepository.setUrl( "http://localhost:" + httpServerPort );
+
+            wagon.connect( testRepository );
+
+            File destFile = FileTestUtils.createUniqueFile( getName(), getName() );
+            destFile.deleteOnExit();
+
+            wagon.get( "/500", destFile );
+
+            wagon.disconnect();
+        }
+        catch ( Exception e )
+        {
+            thrown = e;
+        }
+        finally
+        {
+            stopServer();
+        }
+
+        assertNotNull( thrown );
+        assertEquals( TransferFailedException.class, thrown.getClass() );
+        assertTrue( thrown.getMessage().contains( ErrorWithReasonPhaseServlet.REASON ) );
+    }
+}

Modified: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpsWagonTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpsWagonTest.java?rev=1174159&r1=1174158&r2=1174159&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpsWagonTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpsWagonTest.java Thu Sep 22 14:27:10 2011
@@ -43,7 +43,7 @@ public class HttpsWagonTest
         connector.setKeyPassword( "wagonhttp" );
         connector.setTruststore( getTestPath( "src/test/resources/ssl/keystore" ) );
         connector.setTrustPassword( "wagonhttp" );
-        server.setConnectors( new Connector[] { connector } );
+        server.setConnectors( new Connector[]{ connector } );
     }
 
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/TckTest.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/TckTest.java?rev=1174159&r1=1174158&r2=1174159&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/TckTest.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/TckTest.java Thu Sep 22 14:27:10 2011
@@ -20,9 +20,7 @@ package org.apache.maven.wagon.providers
  */
 
 import org.apache.maven.wagon.tck.http.GetWagonTests;
-import org.apache.maven.wagon.tck.http.HttpWagonTests;
 import org.apache.maven.wagon.tck.http.HttpsGetWagonTests;
-import org.junit.BeforeClass;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 

Modified: maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java?rev=1174159&r1=1174158&r2=1174159&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/WaitForeverServlet.java Thu Sep 22 14:27:10 2011
@@ -19,25 +19,26 @@ package org.apache.maven.wagon.providers
  * under the License.
  */
 
-import java.io.IOException;
+import org.apache.log4j.Logger;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-
-import org.apache.log4j.Logger;
+import java.io.IOException;
 
 /**
  * User: jdumay
  * Date: 24/01/2008
  * Time: 17:25:27
  */
-public class WaitForeverServlet extends HttpServlet {
+public class WaitForeverServlet
+    extends HttpServlet
+{
 
-    private static Logger logger = Logger.getLogger( WaitForeverServlet.class );
+    private Logger logger = Logger.getLogger( WaitForeverServlet.class );
 
-    public void service(HttpServletRequest request, HttpServletResponse response)
+    public void service( HttpServletRequest request, HttpServletResponse response )
         throws ServletException, IOException
     {
         logger.info( "Calling WaitForeverServlet" );
@@ -45,7 +46,7 @@ public class WaitForeverServlet extends 
         {
             Thread.sleep( 2000 );
         }
-        catch (InterruptedException e)
+        catch ( InterruptedException e )
         {
             //eat
         }