You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by br...@apache.org on 2009/12/24 03:40:57 UTC

svn commit: r893686 - in /archiva/branches/MRM-1025/archiva-modules: archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/act...

Author: brett
Date: Thu Dec 24 02:40:57 2009
New Revision: 893686

URL: http://svn.apache.org/viewvc?rev=893686&view=rev
Log:
[MRM-1283] propagate errors occurring during resolution

Added:
    archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolutionException.java
Modified:
    archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java
    archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
    archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
    archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java
    archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolver.java
    archiva/branches/MRM-1025/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolver.java
    archiva/branches/MRM-1025/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java

Modified: archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java
URL: http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java?rev=893686&r1=893685&r2=893686&view=diff
==============================================================================
--- archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java (original)
+++ archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java Thu Dec 24 02:40:57 2009
@@ -31,6 +31,7 @@
 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 @@
 
         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 )

Modified: archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
URL: http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java?rev=893686&r1=893685&r2=893686&view=diff
==============================================================================
--- archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java (original)
+++ archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java Thu Dec 24 02:40:57 2009
@@ -27,6 +27,7 @@
 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 @@
             {
                 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() );
+                    }
                 }
             }
 

Modified: archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
URL: http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java?rev=893686&r1=893685&r2=893686&view=diff
==============================================================================
--- archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java (original)
+++ archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java Thu Dec 24 02:40:57 2009
@@ -34,6 +34,7 @@
 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 @@
         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 @@
 
         if ( versionMetadata == null )
         {
-            addActionError( "Artifact not found" );
+            addActionError( errorMsg != null ? errorMsg : "Artifact not found" );
             return ERROR;
         }
         model = versionMetadata;

Modified: archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java
URL: http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java?rev=893686&r1=893685&r2=893686&view=diff
==============================================================================
--- archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java (original)
+++ archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java Thu Dec 24 02:40:57 2009
@@ -62,6 +62,7 @@
 
     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 @@
             }
             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 );

Added: archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolutionException.java
URL: http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolutionException.java?rev=893686&view=auto
==============================================================================
--- archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolutionException.java (added)
+++ archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolutionException.java Thu Dec 24 02:40:57 2009
@@ -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 );
+    }
+}

Modified: archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolver.java
URL: http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolver.java?rev=893686&r1=893685&r2=893686&view=diff
==============================================================================
--- archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolver.java (original)
+++ archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolver.java Thu Dec 24 02:40:57 2009
@@ -31,7 +31,8 @@
     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 );
 

Modified: archiva/branches/MRM-1025/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolver.java
URL: http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolver.java?rev=893686&r1=893685&r2=893686&view=diff
==============================================================================
--- archiva/branches/MRM-1025/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolver.java (original)
+++ archiva/branches/MRM-1025/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolver.java Thu Dec 24 02:40:57 2009
@@ -38,6 +38,7 @@
 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 ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId,
                                                      String projectVersion )
+        throws MetadataResolutionException
     {
         ManagedRepositoryConfiguration repositoryConfiguration =
             archivaConfiguration.getConfiguration().findManagedRepositoryById( repoId );
@@ -163,8 +165,7 @@
             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 @@
                 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();

Modified: archiva/branches/MRM-1025/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java
URL: http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java?rev=893686&r1=893685&r2=893686&view=diff
==============================================================================
--- archiva/branches/MRM-1025/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java (original)
+++ archiva/branches/MRM-1025/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java Thu Dec 24 02:40:57 2009
@@ -31,6 +31,7 @@
 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 void testGetProjectVersionMetadata()
+        throws Exception
     {
         ProjectVersionMetadata metadata =
             resolver.getProjectVersion( TEST_REPO_ID, "org.apache.archiva", "archiva-common", "1.2.1" );
@@ -147,6 +149,7 @@
     }
 
     public void testGetProjectVersionMetadataForTimestampedSnapshot()
+        throws Exception
     {
         ProjectVersionMetadata metadata =
             resolver.getProjectVersion( TEST_REPO_ID, "org.apache", "apache", "5-SNAPSHOT" );
@@ -183,6 +186,7 @@
     }
 
     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 void testGetProjectVersionMetadataForTimestampedSnapshotMalformedMetadata()
+        throws Exception
     {
         ProjectVersionMetadata metadata =
             resolver.getProjectVersion( TEST_REPO_ID, "com.example.test", "malformed-metadata", "1.0-SNAPSHOT" );
@@ -197,6 +202,7 @@
     }
 
     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 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() );