Browse Source

[MRM-1283] propagate errors occurring during resolution

git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-1025@893686 13f79535-47bb-0310-9956-ffa450edef68
tags/archiva-1.4-M1
Brett Porter 14 years ago
parent
commit
79de06cf3e

+ 10
- 2
archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java View File

@@ -31,6 +31,7 @@ import org.apache.archiva.metadata.model.ArtifactMetadata;
import org.apache.archiva.metadata.model.ProjectMetadata;
import org.apache.archiva.metadata.model.ProjectVersionMetadata;
import org.apache.archiva.metadata.repository.MetadataRepository;
import org.apache.archiva.metadata.repository.MetadataResolutionException;
import org.apache.archiva.metadata.repository.storage.StorageMetadataResolver;
import org.apache.maven.archiva.common.utils.VersionUtil;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
@@ -162,9 +163,16 @@ public class ArchivaMetadataCreationConsumer

String projectVersion = VersionUtil.getBaseVersion( artifact.getVersion() );
// TODO: maybe not too efficient since it may have already been read and stored for this artifact
ProjectVersionMetadata versionMetadata =
storageResolver.getProjectVersion( repository.getId(), artifact.getGroupId(), artifact.getArtifactId(),
ProjectVersionMetadata versionMetadata = null;
try
{
versionMetadata = storageResolver.getProjectVersion( repository.getId(), artifact.getGroupId(), artifact.getArtifactId(),
projectVersion );
}
catch ( MetadataResolutionException e )
{
log.warn( "Error occurred resolving POM for artifact: " + path + "; message: " + e.getMessage() );
}

boolean createVersionMetadata = false;
if ( versionMetadata == null )

+ 11
- 1
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java View File

@@ -27,6 +27,7 @@ import java.util.List;
import java.util.Set;

import org.apache.archiva.metadata.model.ProjectVersionMetadata;
import org.apache.archiva.metadata.repository.MetadataResolutionException;
import org.apache.archiva.metadata.repository.MetadataResolver;
import org.apache.archiva.metadata.repository.storage.maven2.MavenProjectFacet;
import org.apache.commons.collections.CollectionUtils;
@@ -223,7 +224,16 @@ public class BrowseAction
{
if ( versionMetadata == null )
{
versionMetadata = metadataResolver.getProjectVersion( repoId, groupId, artifactId, version );
try
{
versionMetadata = metadataResolver.getProjectVersion( repoId, groupId, artifactId, version );
}
catch ( MetadataResolutionException e )
{
log.error(
"Skipping invalid metadata while compiling shared model for " + groupId + ":" + artifactId +
" in repo " + repoId + ": " + e.getMessage() );
}
}
}


+ 11
- 2
archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java View File

@@ -34,6 +34,7 @@ import org.apache.archiva.metadata.model.Dependency;
import org.apache.archiva.metadata.model.MailingList;
import org.apache.archiva.metadata.model.ProjectVersionMetadata;
import org.apache.archiva.metadata.model.ProjectVersionReference;
import org.apache.archiva.metadata.repository.MetadataResolutionException;
import org.apache.archiva.metadata.repository.MetadataResolver;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.model.ArtifactReference;
@@ -107,13 +108,21 @@ public class ShowArtifactAction
List<String> repos = getObservableRepos();
// In the future, this should be replaced by the repository grouping mechanism, so that we are only making
// simple resource requests here and letting the resolver take care of it
String errorMsg = null;
for ( String repoId : repos )
{
if ( versionMetadata == null )
{
// we don't want the implementation being that intelligent - so another resolver to do the
// "just-in-time" nature of picking up the metadata (if appropriate for the repository type) is used
versionMetadata = metadataResolver.getProjectVersion( repoId, groupId, artifactId, version );
try
{
versionMetadata = metadataResolver.getProjectVersion( repoId, groupId, artifactId, version );
}
catch ( MetadataResolutionException e )
{
errorMsg = e.getMessage();
}
if ( versionMetadata != null )
{
repositoryId = repoId;
@@ -149,7 +158,7 @@ public class ShowArtifactAction

if ( versionMetadata == null )
{
addActionError( "Artifact not found" );
addActionError( errorMsg != null ? errorMsg : "Artifact not found" );
return ERROR;
}
model = versionMetadata;

+ 13
- 4
archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java View File

@@ -62,6 +62,7 @@ public class DefaultMetadataResolver

public ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId,
String projectVersion )
throws MetadataResolutionException
{
ProjectVersionMetadata metadata =
metadataRepository.getProjectVersion( repoId, namespace, projectId, projectVersion );
@@ -198,11 +199,19 @@ public class DefaultMetadataResolver
}
for ( String projectVersion : storageProjectVersions )
{
ProjectVersionMetadata versionMetadata =
storageResolver.getProjectVersion( repoId, namespace, projectId, projectVersion );
if ( versionMetadata != null )
try
{
metadataRepository.updateProjectVersion( repoId, namespace, projectId, versionMetadata );
ProjectVersionMetadata versionMetadata =
storageResolver.getProjectVersion( repoId, namespace, projectId, projectVersion );
if ( versionMetadata != null )
{
metadataRepository.updateProjectVersion( repoId, namespace, projectId, versionMetadata );
}
}
catch ( MetadataResolutionException e )
{
log.warn( "Not update project in metadata repository due to an error resolving it from storage: " +
e.getMessage() );
}
}
projectVersions = new ArrayList<String>( projectVersions );

+ 29
- 0
archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolutionException.java View File

@@ -0,0 +1,29 @@
package org.apache.archiva.metadata.repository;

/*
* 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.
*/

public class MetadataResolutionException
extends Exception
{
public MetadataResolutionException( String message )
{
super( message );
}
}

+ 2
- 1
archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolver.java View File

@@ -31,7 +31,8 @@ public interface MetadataResolver
ProjectMetadata getProject( String repoId, String namespace, String projectId );

ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId,
String projectVersion );
String projectVersion )
throws MetadataResolutionException;

Collection<String> getArtifactVersions( String repoId, String namespace, String projectId, String projectVersion );


+ 6
- 5
archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolver.java View File

@@ -38,6 +38,7 @@ import org.apache.archiva.metadata.model.ProjectMetadata;
import org.apache.archiva.metadata.model.ProjectVersionMetadata;
import org.apache.archiva.metadata.model.ProjectVersionReference;
import org.apache.archiva.metadata.repository.MetadataRepository;
import org.apache.archiva.metadata.repository.MetadataResolutionException;
import org.apache.archiva.metadata.repository.filter.AllFilter;
import org.apache.archiva.metadata.repository.filter.Filter;
import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
@@ -102,6 +103,7 @@ public class Maven2RepositoryMetadataResolver

public ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId,
String projectVersion )
throws MetadataResolutionException
{
ManagedRepositoryConfiguration repositoryConfiguration =
archivaConfiguration.getConfiguration().findManagedRepositoryById( repoId );
@@ -163,8 +165,7 @@ public class Maven2RepositoryMetadataResolver
addProblemReport( repoId, namespace, projectId, projectVersion, "invalid-pom",
"The artifact's POM file '" + file + "' was invalid: " + e.getMessage() );

// metadata could not be resolved
return null;
throw new MetadataResolutionException( e.getMessage() );
}

// Check if the POM is in the correct location
@@ -187,10 +188,10 @@ public class Maven2RepositoryMetadataResolver
message.append( "\nIncorrect version: " ).append( model.getVersion() );
}

addProblemReport( repoId, namespace, projectId, projectVersion, "mislocated-pom", message.toString() );
String msg = message.toString();
addProblemReport( repoId, namespace, projectId, projectVersion, "mislocated-pom", msg );

// metadata could not be resolved
return null;
throw new MetadataResolutionException( msg );
}

ProjectVersionMetadata metadata = new ProjectVersionMetadata();

+ 33
- 16
archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java View File

@@ -31,6 +31,7 @@ import org.apache.archiva.metadata.model.License;
import org.apache.archiva.metadata.model.MailingList;
import org.apache.archiva.metadata.model.ProjectVersionMetadata;
import org.apache.archiva.metadata.repository.MetadataRepository;
import org.apache.archiva.metadata.repository.MetadataResolutionException;
import org.apache.archiva.metadata.repository.filter.ExcludesFilter;
import org.apache.archiva.metadata.repository.storage.StorageMetadataResolver;
import org.apache.archiva.reports.RepositoryProblemFacet;
@@ -77,6 +78,7 @@ public class Maven2RepositoryMetadataResolverTest
}

public void testGetProjectVersionMetadata()
throws Exception
{
ProjectVersionMetadata metadata =
resolver.getProjectVersion( TEST_REPO_ID, "org.apache.archiva", "archiva-common", "1.2.1" );
@@ -147,6 +149,7 @@ public class Maven2RepositoryMetadataResolverTest
}

public void testGetProjectVersionMetadataForTimestampedSnapshot()
throws Exception
{
ProjectVersionMetadata metadata =
resolver.getProjectVersion( TEST_REPO_ID, "org.apache", "apache", "5-SNAPSHOT" );
@@ -183,6 +186,7 @@ public class Maven2RepositoryMetadataResolverTest
}

public void testGetProjectVersionMetadataForTimestampedSnapshotMissingMetadata()
throws Exception
{
ProjectVersionMetadata metadata =
resolver.getProjectVersion( TEST_REPO_ID, "com.example.test", "missing-metadata", "1.0-SNAPSHOT" );
@@ -190,6 +194,7 @@ public class Maven2RepositoryMetadataResolverTest
}

public void testGetProjectVersionMetadataForTimestampedSnapshotMalformedMetadata()
throws Exception
{
ProjectVersionMetadata metadata =
resolver.getProjectVersion( TEST_REPO_ID, "com.example.test", "malformed-metadata", "1.0-SNAPSHOT" );
@@ -197,6 +202,7 @@ public class Maven2RepositoryMetadataResolverTest
}

public void testGetProjectVersionMetadataForTimestampedSnapshotIncompleteMetadata()
throws Exception
{
ProjectVersionMetadata metadata =
resolver.getProjectVersion( TEST_REPO_ID, "com.example.test", "incomplete-metadata", "1.0-SNAPSHOT" );
@@ -204,36 +210,47 @@ public class Maven2RepositoryMetadataResolverTest
}

public void testGetProjectVersionMetadataForInvalidPom()
throws Exception
{
assertTrue( metadataRepository.getMetadataFacets( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID ).isEmpty() );

ProjectVersionMetadata metadata =
try
{
resolver.getProjectVersion( TEST_REPO_ID, "com.example.test", "invalid-pom", "1.0" );
assertNull( metadata );

assertFalse( metadataRepository.getMetadataFacets( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID ).isEmpty() );
RepositoryProblemFacet facet =
(RepositoryProblemFacet) metadataRepository.getMetadataFacet( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID,
"com.example.test/invalid-pom/1.0" );
assertEquals( "invalid-pom", facet.getProblem() );
fail( "Should have received an exception due to invalid POM" );
}
catch ( MetadataResolutionException e )
{
assertFalse( metadataRepository.getMetadataFacets( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID ).isEmpty() );
RepositoryProblemFacet facet =
(RepositoryProblemFacet) metadataRepository.getMetadataFacet( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID,
"com.example.test/invalid-pom/1.0" );
assertEquals( "invalid-pom", facet.getProblem() );
}
}

public void testGetProjectVersionMetadataForMislocatedPom()
throws Exception
{
assertTrue( metadataRepository.getMetadataFacets( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID ).isEmpty() );

ProjectVersionMetadata metadata =
try
{
resolver.getProjectVersion( TEST_REPO_ID, "com.example.test", "mislocated-pom", "1.0" );
assertNull( metadata );

assertFalse( metadataRepository.getMetadataFacets( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID ).isEmpty() );
RepositoryProblemFacet facet =
(RepositoryProblemFacet) metadataRepository.getMetadataFacet( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID,
"com.example.test/mislocated-pom/1.0" );
assertEquals( "mislocated-pom", facet.getProblem() );
fail( "Should have received an exception due to mislocated POM" );
}
catch ( MetadataResolutionException e )
{
assertFalse( metadataRepository.getMetadataFacets( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID ).isEmpty() );
RepositoryProblemFacet facet =
(RepositoryProblemFacet) metadataRepository.getMetadataFacet( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID,
"com.example.test/mislocated-pom/1.0" );
assertEquals( "mislocated-pom", facet.getProblem() );
}
}

public void testGetProjectVersionMetadataForMissingPom()
throws Exception
{
assertTrue( metadataRepository.getMetadataFacets( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID ).isEmpty() );


Loading…
Cancel
Save