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
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
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;
}
}
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;
}
}
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;
+ }
}
}
+ /*
+ * 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" );
+ }
+
}