aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Stockhammer <martin_s@apache.org>2017-05-04 00:22:31 +0200
committerMartin Stockhammer <martin_s@apache.org>2017-05-04 00:22:31 +0200
commit2bf5154f1366fc21c4ecb02ef4ef71ca6fdc5a45 (patch)
tree0a380c3e0115b0d07e9c355b40fea6215ff02e12
parentb7c191b331ac6a2f09a643835afdac154c9554fa (diff)
downloadarchiva-2bf5154f1366fc21c4ecb02ef4ef71ca6fdc5a45.tar.gz
archiva-2bf5154f1366fc21c4ecb02ef4ef71ca6fdc5a45.zip
MRM-1933, MRM-1940: Fixing repository check
Remove trailing slashes from the remote repositories Use special check paths for certain servers
-rw-r--r--archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java6
-rw-r--r--archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRemoteRepositoriesService.java42
-rw-r--r--archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java52
3 files changed, 91 insertions, 9 deletions
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java
index db8021d86..fdab2432e 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-api/src/main/java/org/apache/archiva/admin/model/beans/RemoteRepository.java
@@ -19,6 +19,8 @@ package org.apache.archiva.admin.model.beans;
* under the License.
*/
+import org.apache.commons.lang.StringUtils;
+
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import java.util.ArrayList;
@@ -112,7 +114,7 @@ public class RemoteRepository
int timeout )
{
super( id, name, layout );
- this.url = url;
+ this.url = StringUtils.stripEnd(url,"/");
this.userName = userName;
this.password = password;
this.timeout = timeout;
@@ -135,7 +137,7 @@ public class RemoteRepository
public void setUrl( String url )
{
- this.url = url;
+ this.url = StringUtils.stripEnd(url,"/");
}
public String getUserName()
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRemoteRepositoriesService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRemoteRepositoriesService.java
index 5a7948719..a6b341aa7 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRemoteRepositoriesService.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRemoteRepositoriesService.java
@@ -38,11 +38,14 @@ import org.apache.maven.wagon.proxy.ProxyInfo;
import org.apache.maven.wagon.repository.Repository;
import org.springframework.stereotype.Service;
+import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.ws.rs.core.Response;
import java.net.URL;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* @author Olivier Lamy
@@ -67,6 +70,16 @@ public class DefaultRemoteRepositoriesService
int checkReadTimeout = 10000;
int checkTimeout = 9000;
+ // TODO: make this configurable
+ private Map<String,String> remoteConnectivityCheckPaths = new HashMap<>();
+
+ @PostConstruct
+ private void init() {
+ // default initialization for known servers
+ remoteConnectivityCheckPaths.put("http://download.oracle.com/maven","com/sleepycat/je/license.txt");
+ remoteConnectivityCheckPaths.put("https://download.oracle.com/maven","com/sleepycat/je/license.txt");
+ }
+
@Override
public List<RemoteRepository> getRemoteRepositories()
throws ArchivaRestServiceException
@@ -197,12 +210,17 @@ public class DefaultRemoteRepositoriesService
proxyInfo.setUserName( networkProxy.getUsername() );
proxyInfo.setPassword( networkProxy.getPassword() );
}
+ String url = StringUtils.stripEnd(remoteRepository.getUrl(),"/");
+ wagon.connect( new Repository( remoteRepository.getId(), url ), proxyInfo );
- wagon.connect( new Repository( remoteRepository.getId(), remoteRepository.getUrl() ), proxyInfo );
-
- // we only check connectivity as remote repo can be empty
- // MRM-1909: Wagon implementation appends a slash already
- wagon.getFileList( "" );
+ // MRM-1933, there are certain servers that do not allow browsing
+ if (remoteConnectivityCheckPaths.containsKey(url)) {
+ return wagon.resourceExists(remoteConnectivityCheckPaths.get(url));
+ } else {
+ // we only check connectivity as remote repo can be empty
+ // MRM-1909: Wagon implementation appends a slash already
+ wagon.getFileList("");
+ }
return Boolean.TRUE;
}
@@ -213,8 +231,10 @@ public class DefaultRemoteRepositoriesService
}
catch ( Exception e )
{
- throw new ArchivaRestServiceException( e.getMessage(),
- Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );
+ // This service returns either true or false, Exception cannot be handled by the clients
+ log.debug("Exception occured on connectivity test.", e);
+ log.info("Connection exception: {}", e.getMessage());
+ return Boolean.FALSE;
}
}
@@ -234,4 +254,12 @@ public class DefaultRemoteRepositoriesService
public void setCheckTimeout(int checkTimeout) {
this.checkTimeout = checkTimeout;
}
+
+ public Map<String, String> getRemoteConnectivityCheckPaths() {
+ return remoteConnectivityCheckPaths;
+ }
+
+ public void setRemoteConnectivityCheckPaths(Map<String, String> remoteConnectivityCheckPaths) {
+ this.remoteConnectivityCheckPaths = remoteConnectivityCheckPaths;
+ }
}
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java
index 3d284e452..d3d667283 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RemoteRepositoriesServiceTest.java
@@ -161,10 +161,62 @@ public class RemoteRepositoriesServiceTest
}
+ /*
+ * Check maven repository
+ */
+ @Test
+ public void checkRemoteConnectivity2()
+ throws Exception {
+ RemoteRepositoriesService service = getRemoteRepositoriesService();
+
+ WebClient.client(service).header("Authorization", authorizationHeader);
+
+ int initialSize = service.getRemoteRepositories().size();
+
+ service.addRemoteRepository(getRemoteMavenRepository());
+
+ assertTrue(service.checkRemoteConnectivity("id-maven1"));
+
+ }
+
+
+ /*
+ * Check oracle repository that allows not browsing (MRM-1933)
+ */
+ @Test
+ public void checkRemoteConnectivity3()
+ throws Exception {
+ RemoteRepositoriesService service = getRemoteRepositoriesService();
+
+ WebClient.client(service).header("Authorization", authorizationHeader);
+ WebClient.client(service).accept("application/json");
+
+ int initialSize = service.getRemoteRepositories().size();
+
+ service.addRemoteRepository(getRemoteOracleRepository());
+
+ assertTrue(service.checkRemoteConnectivity("id-oracle"));
+
+ }
+
RemoteRepository getRemoteRepository()
{
return new RemoteRepository( "id-new", "new one", "http://foo.com", "default", "foo", "foopassword", 120,
"cool repo" );
}
+
+ RemoteRepository getRemoteMavenRepository()
+ {
+ return new RemoteRepository( "id-maven1", "Maven1", "http://repo.maven.apache.org/maven2", "default", "foo", "foopassword", 120,
+ "cool repo3" );
+ }
+
+
+ RemoteRepository getRemoteOracleRepository()
+ {
+ return new RemoteRepository( "id-oracle", "Oracle", "http://download.oracle.com/maven", "default", "foo", "foopassword", 120,
+ "cool repo4" );
+ }
+
}