]> source.dussan.org Git - archiva.git/commitdiff
[MRM-1282] improve exception handling
authorBrett Porter <brett@apache.org>
Wed, 25 Nov 2009 12:17:38 +0000 (12:17 +0000)
committerBrett Porter <brett@apache.org>
Wed, 25 Nov 2009 12:17:38 +0000 (12:17 +0000)
git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-1025@884066 13f79535-47bb-0310-9956-ffa450edef68

archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java
archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolver.java
archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolverException.java [new file with mode: 0644]
archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolver.java
archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java

index f1b63ae2a0557370ef94c6e2dd7bdcec8cbf145e..4d87e7203820ad074aba0febdfa4d53846d71905 100644 (file)
@@ -26,6 +26,7 @@ import java.util.List;
 import com.opensymphony.xwork2.Validateable;
 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
 import org.apache.archiva.metadata.repository.MetadataResolver;
+import org.apache.archiva.metadata.repository.MetadataResolverException;
 import org.apache.archiva.metadata.repository.storage.maven2.MavenProjectFacet;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.database.ArchivaDatabaseException;
@@ -120,7 +121,15 @@ public class ShowArtifactAction
 
                 // 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 ( MetadataResolverException e )
+                {
+                    addActionError( "Error occurred resolving metadata for project: " + e.getMessage() );
+                    return ERROR;
+                }
                 if ( versionMetadata != null )
                 {
                     repositoryId = repoId;
index 0fb3cbabbf12e16408edc8504ee2a445cfaabce5..e058ca22d884f07d1ec1a904e8cb0d8a2dd606c0 100644 (file)
@@ -49,6 +49,7 @@ public class DefaultMetadataResolver
     }
 
     public ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId, String projectVersion )
+        throws MetadataResolverException
     {
         ProjectVersionMetadata metadata = metadataRepository.getProjectVersion( repoId, namespace, projectId, projectVersion );
         // TODO: do we want to detect changes as well by comparing timestamps? isProjectVersionNewerThan(updated)
index 7050b05526842e3c5b94dd677265ce479775c8bc..7e6aaef7d78bb18cd094d27ea4bb18207ff7ecd8 100644 (file)
@@ -21,14 +21,15 @@ package org.apache.archiva.metadata.repository;
 
 import java.util.Collection;
 
-import org.apache.archiva.metadata.model.ProjectVersionMetadata;
 import org.apache.archiva.metadata.model.ProjectMetadata;
+import org.apache.archiva.metadata.model.ProjectVersionMetadata;
 
 public interface MetadataResolver
 {
     ProjectMetadata getProject( String repoId, String namespace, String projectId );
 
-    ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId, String projectVersion );
+    ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId, String projectVersion )
+        throws MetadataResolverException;
 
     Collection<String> getArtifactVersions( String repoId, String namespace, String projectId, String projectVersion );
 }
diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolverException.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataResolverException.java
new file mode 100644 (file)
index 0000000..c62a257
--- /dev/null
@@ -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 MetadataResolverException
+    extends Exception
+{
+    public MetadataResolverException( String message, Exception cause )
+    {
+        super( message, cause );
+    }
+}
index b3fa377cd0cd25476b970bd70b5bea83faa89cb9..a18d4f57da296f084cdafed92d7855f44704a83b 100644 (file)
@@ -27,6 +27,7 @@ import java.util.List;
 import org.apache.archiva.metadata.model.ProjectMetadata;
 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
 import org.apache.archiva.metadata.repository.MetadataResolver;
+import org.apache.archiva.metadata.repository.MetadataResolverException;
 import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
 import org.apache.maven.archiva.common.utils.VersionUtil;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
@@ -42,6 +43,8 @@ import org.apache.maven.model.building.DefaultModelBuildingRequest;
 import org.apache.maven.model.building.ModelBuilder;
 import org.apache.maven.model.building.ModelBuildingException;
 import org.apache.maven.model.building.ModelBuildingRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * @plexus.component role="org.apache.archiva.metadata.repository.MetadataResolver" role-hint="maven2"
@@ -64,6 +67,8 @@ public class Maven2RepositoryMetadataResolver
      */
     private RepositoryPathTranslator pathTranslator;
 
+    private final static Logger log = LoggerFactory.getLogger( Maven2RepositoryMetadataResolver.class );
+
     public ProjectMetadata getProject( String repoId, String namespace, String projectId )
     {
         throw new UnsupportedOperationException();
@@ -71,6 +76,7 @@ public class Maven2RepositoryMetadataResolver
 
     public ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId,
                                                      String projectVersion )
+        throws MetadataResolverException
     {
         ManagedRepositoryConfiguration repositoryConfiguration =
             archivaConfiguration.getConfiguration().findManagedRepositoryById( repoId );
@@ -81,10 +87,11 @@ public class Maven2RepositoryMetadataResolver
         if ( VersionUtil.isSnapshot( projectVersion ) )
         {
             // TODO: need much error handling here for incorrect metadata
+            File metadataFile =
+                pathTranslator.toFile( basedir, namespace, projectId, projectVersion, "maven-metadata.xml" );
             try
             {
-                MavenRepositoryMetadata metadata = MavenRepositoryMetadataReader.read(
-                    pathTranslator.toFile( basedir, namespace, projectId, projectVersion, "maven-metadata.xml" ) );
+                MavenRepositoryMetadata metadata = MavenRepositoryMetadataReader.read( metadataFile );
 
                 artifactVersion =
                     artifactVersion.substring( 0, artifactVersion.length() - 8 ); // remove SNAPSHOT from end
@@ -94,8 +101,8 @@ public class Maven2RepositoryMetadataResolver
             }
             catch ( XMLException e )
             {
-                // TODO: handle it
-                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
+                // unable to parse metadata - log it, and continue with the version as the original SNAPSHOT version
+                log.warn( "Invalid metadata: " + metadataFile + " - " + e.getMessage() );
             }
         }
 
@@ -114,8 +121,7 @@ public class Maven2RepositoryMetadataResolver
         }
         catch ( ModelBuildingException e )
         {
-            // TODO: handle it
-            throw new RuntimeException( e );
+            throw new MetadataResolverException( "Unable to build Maven POM to derive metadata from: " + e.getMessage(), e );
         }
 
         ProjectVersionMetadata metadata = new ProjectVersionMetadata();
index a1de458d97a4498fcaa904f7d80c7792df32a13a..853738abfa61b911b15ba6a2473baa4b35e61356 100644 (file)
@@ -24,6 +24,7 @@ import java.util.Arrays;
 import org.apache.archiva.metadata.model.License;
 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
 import org.apache.archiva.metadata.repository.MetadataResolver;
+import org.apache.archiva.metadata.repository.MetadataResolverException;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
@@ -59,6 +60,7 @@ public class Maven2RepositoryMetadataResolverTest
     }
 
     public void testGetProjectVersionMetadata()
+        throws MetadataResolverException
     {
         ProjectVersionMetadata metadata =
             resolver.getProjectVersion( TEST_REPO_ID, "org.apache.archiva", "archiva-common", "1.2.1" );
@@ -90,6 +92,7 @@ public class Maven2RepositoryMetadataResolverTest
     }
 
     public void testGetProjectVersionMetadataForTimestampedSnapshot()
+        throws MetadataResolverException
     {
         ProjectVersionMetadata metadata =
             resolver.getProjectVersion( TEST_REPO_ID, "org.apache", "apache", "5-SNAPSHOT" );