You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2020/05/02 09:23:50 UTC
[maven-wagon] branch master updated: [WAGON-591] Transfer event is
not restarted when request is redirected
This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-wagon.git
The following commit(s) were added to refs/heads/master by this push:
new 0e12ecb [WAGON-591] Transfer event is not restarted when request is redirected
0e12ecb is described below
commit 0e12ecbcf0a08dd24965cd8c5876fc775d89f686
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Fri May 1 18:38:37 2020 +0200
[WAGON-591] Transfer event is not restarted when request is redirected
The newly introduced WagonRedirectStrategy controls all redirect events
and dispatches now the approapriate (re-)start event to reset all counters.
For this WagonHttpEntity is now package public and several getters have
been added to invoke event listeners with approapriate bits.
---
.../wagon/shared/http/AbstractHttpClientWagon.java | 21 +++++++++++--
.../wagon/shared/http/WagonRedirectStrategy.java | 35 ++++++++++++++++++++++
2 files changed, 53 insertions(+), 3 deletions(-)
diff --git a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
index 1851d9b..fc809a7 100644
--- a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
+++ b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
@@ -118,7 +118,7 @@ import static org.apache.maven.wagon.shared.http.HttpMessageUtils.formatTransfer
public abstract class AbstractHttpClientWagon
extends StreamWagon
{
- private final class WagonHttpEntity
+ final class WagonHttpEntity
extends AbstractHttpEntity
{
private final Resource resource;
@@ -153,9 +153,14 @@ public abstract class AbstractHttpClientWagon
this.wagon = wagon;
}
- public long getContentLength()
+ public Resource getResource()
{
- return length;
+ return resource;
+ }
+
+ public Wagon getWagon()
+ {
+ return wagon;
}
public InputStream getContent()
@@ -168,6 +173,16 @@ public abstract class AbstractHttpClientWagon
return stream;
}
+ public File getSource()
+ {
+ return source;
+ }
+
+ public long getContentLength()
+ {
+ return length;
+ }
+
public boolean isRepeatable()
{
return repeatable;
diff --git a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/WagonRedirectStrategy.java b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/WagonRedirectStrategy.java
index 5488f80..6694a38 100644
--- a/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/WagonRedirectStrategy.java
+++ b/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/WagonRedirectStrategy.java
@@ -21,6 +21,7 @@ package org.apache.maven.wagon.shared.http;
import java.net.URI;
+import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
@@ -33,6 +34,10 @@ import org.apache.http.client.methods.RequestBuilder;
import org.apache.http.impl.client.DefaultRedirectStrategy;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.Args;
+import org.apache.maven.wagon.events.TransferEvent;
+import org.apache.maven.wagon.shared.http.AbstractHttpClientWagon.WagonHttpEntity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* A custom redirect strategy for Apache Maven Wagon HttpClient.
@@ -43,6 +48,8 @@ import org.apache.http.util.Args;
public class WagonRedirectStrategy extends DefaultRedirectStrategy
{
+ private static final Logger LOGGER = LoggerFactory.getLogger( WagonRedirectStrategy.class );
+
private static final int SC_PERMANENT_REDIRECT = 308;
public WagonRedirectStrategy()
@@ -85,6 +92,34 @@ public class WagonRedirectStrategy extends DefaultRedirectStrategy
final HttpContext context ) throws ProtocolException
{
final URI uri = getLocationURI( request, response, context );
+ if ( request instanceof HttpEntityEnclosingRequest )
+ {
+ HttpEntityEnclosingRequest encRequest = (HttpEntityEnclosingRequest) request;
+ if ( encRequest.getEntity() instanceof AbstractHttpClientWagon.WagonHttpEntity )
+ {
+ AbstractHttpClientWagon.WagonHttpEntity whe = (WagonHttpEntity) encRequest.getEntity();
+ if ( whe.getWagon() instanceof AbstractHttpClientWagon )
+ {
+ // Re-execute AbstractWagon#firePutStarted(Resource, File)
+ AbstractHttpClientWagon httpWagon = (AbstractHttpClientWagon) whe.getWagon();
+ TransferEvent transferEvent =
+ new TransferEvent( httpWagon, whe.getResource(),
+ TransferEvent.TRANSFER_STARTED, TransferEvent.REQUEST_PUT );
+ transferEvent.setTimestamp( System.currentTimeMillis() );
+ transferEvent.setLocalFile( whe.getSource() );
+ httpWagon.getTransferEventSupport().fireDebug(
+ String.format( "Following redirect from '%s' to '%s'",
+ request.getRequestLine().getUri(), uri.toASCIIString() ) );
+ httpWagon.getTransferEventSupport().fireTransferStarted( transferEvent );
+ }
+ else
+ {
+ LOGGER.warn( "Cannot properly handle redirect transfer event, wagon has unexpected class: {}",
+ whe.getWagon().getClass() );
+ }
+ }
+ }
+
return RequestBuilder.copy( request ).setUri( uri ).build();
}