This is an automated email from the ASF dual-hosted git repository.

martin_s pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/archiva.git

commit f6f495d494ac2607ae1f850920673c4f64b241cf
Author: Martin Stockhammer <[email protected]>
AuthorDate: Mon Feb 10 23:21:32 2020 +0100

    Refactoring ManagedRepositoryContent
---
 .../core/repository/AbstractRepositoryPurge.java   |   4 +
 .../CleanupReleasedSnapshotsRepositoryPurge.java   |   4 +
 .../core/repository/DaysOldRepositoryPurge.java    |   8 +-
 .../repository/RetentionCountRepositoryPurge.java  |   7 +-
 .../repository/ContentNotFoundException.java       |   2 +-
 .../repository/ManagedRepositoryContent.java       |  73 ++++-
 .../repository/metadata/base/MetadataTools.java    |  22 +-
 .../mock/ManagedRepositoryContentMock.java         |  50 ++-
 .../scanner/mock/ManagedRepositoryContentMock.java |  48 ++-
 .../mock/ManagedRepositoryContentMock.java         |  48 ++-
 .../maven2/ManagedDefaultRepositoryContent.java    | 338 +++++++++++++++------
 .../ManagedDefaultRepositoryContentTest.java       |  49 ++-
 .../src/test/resources/log4j2-test.xml             |  41 +++
 .../rest/services/DefaultRepositoriesService.java  |  22 +-
 .../rest/services/RepositoriesServiceTest.java     |   1 +
 .../archiva/webdav/ArchivaDavResourceFactory.java  |   7 +-
 16 files changed, 561 insertions(+), 163 deletions(-)

diff --git 
a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurge.java
 
b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurge.java
index 6df43d7..a8daf16 100644
--- 
a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurge.java
+++ 
b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurge.java
@@ -234,6 +234,10 @@ public abstract class AbstractRepositoryPurge
                 {
                     log.warn( "skip error deleting artifact {}: {}", 
reference, e.getMessage( ) );
                 }
+                catch ( org.apache.archiva.repository.ContentAccessException e 
)
+                {
+                    e.printStackTrace( );
+                }
 
                 boolean snapshotVersion = VersionUtil.isSnapshot( 
reference.getVersion( ) );
 
diff --git 
a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java
 
b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java
index 56b3bf0..84a1d0f 100644
--- 
a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java
+++ 
b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java
@@ -181,6 +181,10 @@ public class CleanupReleasedSnapshotsRepositoryPurge
         {
             log.error( "Could not remove metadata during cleanup of released 
snapshots of {}", path, e );
         }
+        catch ( org.apache.archiva.repository.ContentAccessException e )
+        {
+            e.printStackTrace( );
+        }
     }
 
 
diff --git 
a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
 
b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
index 1a443ee..f5ae868 100644
--- 
a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
+++ 
b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurge.java
@@ -115,7 +115,7 @@ public class DaysOldRepositoryPurge
                 {
                     if ( newArtifactFile.getModificationTime().toEpochMilli() 
< olderThanThisDate.getTimeInMillis( ) )
                     {
-                        artifactsToDelete.addAll( 
repository.getRelatedArtifacts( newArtifactReference ) );
+                        artifactsToDelete.addAll( 
repository.getRelatedArtifacts( repository.toVersion(newArtifactReference) ) );
                     }
                 }
                 // Is this a timestamp snapshot "1.0-20070822.123456-42" ?
@@ -125,7 +125,7 @@ public class DaysOldRepositoryPurge
 
                     if ( timestampCal.getTimeInMillis( ) < 
olderThanThisDate.getTimeInMillis( ) )
                     {
-                        artifactsToDelete.addAll( 
repository.getRelatedArtifacts( newArtifactReference ) );
+                        artifactsToDelete.addAll( 
repository.getRelatedArtifacts( repository.toVersion(newArtifactReference) ) );
                     }
                 }
             }
@@ -139,6 +139,10 @@ public class DaysOldRepositoryPurge
         {
             log.debug( "Not processing file that is not an artifact: {}", 
e.getMessage( ) );
         }
+        catch ( org.apache.archiva.repository.ContentAccessException e )
+        {
+            e.printStackTrace( );
+        }
     }
 
     private Calendar uniqueSnapshotToCalendar( String version )
diff --git 
a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java
 
b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java
index 5cd523d..af617c1 100644
--- 
a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java
+++ 
b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurge.java
@@ -94,7 +94,8 @@ public class RetentionCountRepositoryPurge
                     {
                         break;
                     }
-                    artifactsToDelete.addAll( repository.getRelatedArtifacts( 
getNewArtifactReference( artifact, version ) ) );
+                    VersionedReference ref = repository.toVersion( 
getNewArtifactReference( artifact, version ) );
+                    artifactsToDelete.addAll( repository.getRelatedArtifacts( 
ref ) );
                 }
                 purge( artifactsToDelete );
             }
@@ -107,6 +108,10 @@ public class RetentionCountRepositoryPurge
         {
             log.error( "Repostory artifact not found {}", path );
         }
+        catch ( org.apache.archiva.repository.ContentAccessException e )
+        {
+            e.printStackTrace( );
+        }
     }
 
     /*
diff --git 
a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ContentNotFoundException.java
 
b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ContentNotFoundException.java
index 7579deb..63e7ee7 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ContentNotFoundException.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ContentNotFoundException.java
@@ -20,8 +20,8 @@ package org.apache.archiva.repository;
  */
 
 /**
- * ContentNotFoundException is thrown in response for requests for content 
that is not the repository. 
  *
+ * ContentNotFoundException is thrown in response for requests for content 
that is not in the repository.
  *
  */
 public class ContentNotFoundException
diff --git 
a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
 
b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
index 2948044..5dd39cc 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java
@@ -48,7 +48,15 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
     VersionedReference toVersion( String groupId, String artifactId, String 
version );
 
     /**
-     * Return the version reference the artifact is part of.
+     * Returns the version reference that represents the generic version, 
which means that
+     * snapshot versions are converted to <VERSION>-SNAPSHOT
+     * @param artifactReference the artifact reference
+     * @return the generic version
+     */
+    VersionedReference toGenericVersion( ArtifactReference artifactReference );
+
+    /**
+     * Return the version reference that matches exactly the version string of 
the artifact
      *
      * @param artifactReference The artifact reference
      * @return the version reference
@@ -75,7 +83,7 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
      * @throws ContentNotFoundException
      */
     void deleteVersion( VersionedReference reference )
-        throws ContentNotFoundException;
+        throws ContentNotFoundException, ContentAccessException;
 
     /**
      * delete a specified artifact from the repository
@@ -84,7 +92,7 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
      * @throws ContentNotFoundException
      */
     void deleteArtifact( ArtifactReference artifactReference )
-        throws ContentNotFoundException;
+        throws ContentNotFoundException, ContentAccessException;
 
     /**
      * @param groupId
@@ -92,7 +100,7 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
      * @since 1.4-M3
      */
     void deleteGroupId( String groupId )
-        throws ContentNotFoundException;
+        throws ContentNotFoundException, ContentAccessException;
 
     /**
      *
@@ -101,7 +109,15 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
      * @throws ContentNotFoundException
      */
     void deleteProject( String namespace, String projectId )
-        throws RepositoryException;
+        throws ContentNotFoundException, ContentAccessException;
+
+
+    /**
+     * Deletes a project
+     * @param reference
+     */
+    void deleteProject(ProjectReference reference) throws 
ContentNotFoundException, ContentAccessException;
+
 
     /**
      * <p>
@@ -118,6 +134,26 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
     /**
      * <p>
      * Gather up the list of related artifacts to the ArtifactReference 
provided.
+     * If type and / or classifier of the reference is set, this returns only 
a list of artifacts that is directly
+     * related to the given artifact, like checksums.
+     * If type and classifier is <code>null</code> it will return the same 
artifacts as 
+     * {@link #getRelatedArtifacts(VersionedReference)}
+     * </p>
+     * <p>
+     * <strong>NOTE:</strong> Some layouts (such as maven 1 "legacy") are not 
compatible with this query.
+     * </p>
+     *
+     * @param reference the reference to work off of.
+     * @return the list of ArtifactReferences for related artifacts, if
+     * @throws ContentNotFoundException if the initial artifact reference does 
not exist within the repository.
+     * @see #getRelatedArtifacts(VersionedReference)
+     */
+    List<ArtifactReference> getRelatedArtifacts( ArtifactReference reference )
+        throws ContentNotFoundException, LayoutException, 
ContentAccessException;
+
+    /**
+     * <p>
+     * Gather up the list of related artifacts to the ArtifactReference 
provided.
      * This typically includes the pom files, and those things with
      * classifiers (such as doc, source code, test libs, etc...). Even if the 
classifier
      * is set in the artifact reference, it may return artifacts with 
different classifiers.
@@ -130,9 +166,8 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
      * @return the list of ArtifactReferences for related artifacts, if
      * @throws ContentNotFoundException if the initial artifact reference does 
not exist within the repository.
      */
-    List<ArtifactReference> getRelatedArtifacts( ArtifactReference reference )
-        throws ContentNotFoundException, LayoutException;
-
+    List<ArtifactReference> getRelatedArtifacts( VersionedReference reference )
+        throws ContentNotFoundException, LayoutException, 
ContentAccessException;
     /**
      * Returns all the assets that belong to a given artifact type. The list 
returned contain
      * all the files that correspond to the given artifact reference.
@@ -142,14 +177,14 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
      * @param reference
      * @return
      */
-    List<StorageAsset> getRelatedAssets(ArtifactReference reference) throws 
ContentNotFoundException, LayoutException;
+    List<StorageAsset> getRelatedAssets(ArtifactReference reference) throws 
ContentNotFoundException, LayoutException, ContentAccessException;
 
     /**
      * Returns all artifacts that belong to a given version
      * @param reference the version reference
      * @return the list of artifacts or a empty list
      */
-    List<ArtifactReference> getArtifacts(VersionedReference reference) throws 
ContentNotFoundException, LayoutException;
+    List<ArtifactReference> getArtifacts(VersionedReference reference) throws 
ContentNotFoundException, LayoutException, ContentAccessException;
 
 
 
@@ -184,7 +219,7 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
      * @throws LayoutException
      */
     Set<String> getVersions( ProjectReference reference )
-        throws ContentNotFoundException, LayoutException;
+        throws ContentNotFoundException, LayoutException, 
ContentAccessException;
 
 
 
@@ -202,7 +237,7 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
      * @throws ContentNotFoundException if the versioned reference does not 
exist within the repository.
      */
     Set<String> getVersions( VersionedReference reference )
-        throws ContentNotFoundException;
+        throws ContentNotFoundException, ContentAccessException, 
LayoutException;
 
     /**
      * Determines if the artifact referenced exists in the repository.
@@ -210,7 +245,7 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
      * @param reference the artifact reference to check for.
      * @return true if the artifact referenced exists.
      */
-    boolean hasContent( ArtifactReference reference );
+    boolean hasContent( ArtifactReference reference ) throws 
ContentAccessException;
 
     /**
      * Determines if the project referenced exists in the repository.
@@ -218,7 +253,7 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
      * @param reference the project reference to check for.
      * @return true it the project referenced exists.
      */
-    boolean hasContent( ProjectReference reference );
+    boolean hasContent( ProjectReference reference ) throws 
ContentAccessException;
 
     /**
      * Determines if the version reference exists in the repository.
@@ -226,7 +261,7 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
      * @param reference the version reference to check for.
      * @return true if the version referenced exists.
      */
-    boolean hasContent( VersionedReference reference );
+    boolean hasContent( VersionedReference reference ) throws 
ContentAccessException;
 
     /**
      * Set the repository configuration to associate with this
@@ -242,6 +277,14 @@ public interface ManagedRepositoryContent extends 
RepositoryContent
      * @param reference the artifact reference to use.
      * @return the relative path to the artifact.
      */
+    StorageAsset toFile( VersionedReference reference );
+
+    /**
+     * Given an {@link ArtifactReference}, return the file reference to the 
artifact.
+     *
+     * @param reference the artifact reference to use.
+     * @return the relative path to the artifact.
+     */
     StorageAsset toFile( ArtifactReference reference );
 
     /**
diff --git 
a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/metadata/base/MetadataTools.java
 
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/metadata/base/MetadataTools.java
index d85b3a3..b875be6 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/metadata/base/MetadataTools.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/metadata/base/MetadataTools.java
@@ -43,13 +43,11 @@ import 
org.apache.archiva.repository.ContentNotFoundException;
 import org.apache.archiva.repository.LayoutException;
 import org.apache.archiva.repository.ManagedRepositoryContent;
 import org.apache.archiva.repository.RemoteRepositoryContent;
-import org.apache.archiva.repository.Repository;
 import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.RepositoryType;
 import org.apache.archiva.repository.metadata.MetadataReader;
 import org.apache.archiva.repository.metadata.RepositoryMetadataException;
 import org.apache.archiva.repository.storage.StorageAsset;
-import org.apache.archiva.xml.XMLException;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.math.NumberUtils;
@@ -148,7 +146,15 @@ public class MetadataTools
                                                VersionedReference reference )
         throws LayoutException, IOException, ContentNotFoundException
     {
-        Set<String> foundVersions = managedRepository.getVersions( reference );
+        Set<String> foundVersions = null;
+        try
+        {
+            foundVersions = managedRepository.getVersions( reference );
+        }
+        catch ( org.apache.archiva.repository.ContentAccessException e )
+        {
+            e.printStackTrace( );
+        }
 
         // Next gather up the referenced 'latest' versions found in any 
proxied repositories
         // maven-metadata-${proxyId}.xml files that may be present.
@@ -519,7 +525,15 @@ public class MetadataTools
         metadata.setArtifactId( reference.getArtifactId() );
 
         // Gather up all versions found in the managed repository.
-        Set<String> allVersions = managedRepository.getVersions( reference );
+        Set<String> allVersions = null;
+        try
+        {
+            allVersions = managedRepository.getVersions( reference );
+        }
+        catch ( org.apache.archiva.repository.ContentAccessException e )
+        {
+            e.printStackTrace( );
+        }
 
         // Gather up all plugins found in the managed repository.
         // TODO: do we know this information instead?
diff --git 
a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
 
b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
index 3b42d27..3248430 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
@@ -23,11 +23,11 @@ import org.apache.archiva.model.ArchivaArtifact;
 import org.apache.archiva.model.ArtifactReference;
 import org.apache.archiva.model.ProjectReference;
 import org.apache.archiva.model.VersionedReference;
+import org.apache.archiva.repository.ContentAccessException;
 import org.apache.archiva.repository.ContentNotFoundException;
 import org.apache.archiva.repository.LayoutException;
 import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.ManagedRepositoryContent;
-import org.apache.archiva.repository.RepositoryException;
 import org.apache.archiva.repository.storage.StorageAsset;
 import org.springframework.stereotype.Service;
 
@@ -49,6 +49,12 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
     }
 
     @Override
+    public VersionedReference toGenericVersion( ArtifactReference 
artifactReference )
+    {
+        return null;
+    }
+
+    @Override
     public VersionedReference toVersion( ArtifactReference artifactReference )
     {
         return null;
@@ -61,25 +67,31 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
     }
 
     @Override
-    public void deleteVersion( VersionedReference reference ) throws 
ContentNotFoundException
+    public void deleteVersion( VersionedReference reference ) throws 
ContentNotFoundException, ContentAccessException
+    {
+
+    }
+
+    @Override
+    public void deleteArtifact( ArtifactReference artifactReference ) throws 
ContentNotFoundException, ContentAccessException
     {
 
     }
 
     @Override
-    public void deleteArtifact( ArtifactReference artifactReference ) throws 
ContentNotFoundException
+    public void deleteGroupId( String groupId ) throws 
ContentNotFoundException, ContentAccessException
     {
 
     }
 
     @Override
-    public void deleteGroupId( String groupId ) throws ContentNotFoundException
+    public void deleteProject( String namespace, String projectId ) throws 
ContentNotFoundException, ContentAccessException
     {
 
     }
 
     @Override
-    public void deleteProject( String namespace, String projectId ) throws 
RepositoryException
+    public void deleteProject( ProjectReference reference ) throws 
ContentNotFoundException, ContentAccessException
     {
 
     }
@@ -91,19 +103,25 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
     }
 
     @Override
-    public List<ArtifactReference> getRelatedArtifacts( ArtifactReference 
reference ) throws ContentNotFoundException, LayoutException
+    public List<ArtifactReference> getRelatedArtifacts( ArtifactReference 
reference ) throws ContentNotFoundException, LayoutException, 
ContentAccessException
     {
         return null;
     }
 
     @Override
-    public List<StorageAsset> getRelatedAssets( ArtifactReference reference ) 
throws ContentNotFoundException, LayoutException
+    public List<ArtifactReference> getRelatedArtifacts( VersionedReference 
reference ) throws ContentNotFoundException, LayoutException, 
ContentAccessException
     {
         return null;
     }
 
     @Override
-    public List<ArtifactReference> getArtifacts( VersionedReference reference 
) throws ContentNotFoundException, LayoutException
+    public List<StorageAsset> getRelatedAssets( ArtifactReference reference ) 
throws ContentNotFoundException, LayoutException, ContentAccessException
+    {
+        return null;
+    }
+
+    @Override
+    public List<ArtifactReference> getArtifacts( VersionedReference reference 
) throws ContentNotFoundException, LayoutException, ContentAccessException
     {
         return null;
     }
@@ -121,31 +139,31 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
     }
 
     @Override
-    public Set<String> getVersions( ProjectReference reference ) throws 
ContentNotFoundException, LayoutException
+    public Set<String> getVersions( ProjectReference reference ) throws 
ContentNotFoundException, LayoutException, ContentAccessException
     {
         return null;
     }
 
     @Override
-    public Set<String> getVersions( VersionedReference reference ) throws 
ContentNotFoundException
+    public Set<String> getVersions( VersionedReference reference ) throws 
ContentNotFoundException, ContentAccessException, LayoutException
     {
         return null;
     }
 
     @Override
-    public boolean hasContent( ArtifactReference reference )
+    public boolean hasContent( ArtifactReference reference ) throws 
ContentAccessException
     {
         return false;
     }
 
     @Override
-    public boolean hasContent( ProjectReference reference )
+    public boolean hasContent( ProjectReference reference ) throws 
ContentAccessException
     {
         return false;
     }
 
     @Override
-    public boolean hasContent( VersionedReference reference )
+    public boolean hasContent( VersionedReference reference ) throws 
ContentAccessException
     {
         return false;
     }
@@ -157,6 +175,12 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
     }
 
     @Override
+    public StorageAsset toFile( VersionedReference reference )
+    {
+        return null;
+    }
+
+    @Override
     public ArtifactReference toArtifactReference( String path ) throws 
LayoutException
     {
         return null;
diff --git 
a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java
 
b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java
index 6fec88e..86d43d1 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/mock/ManagedRepositoryContentMock.java
@@ -65,6 +65,12 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
     }
 
     @Override
+    public VersionedReference toGenericVersion( ArtifactReference 
artifactReference )
+    {
+        return null;
+    }
+
+    @Override
     public VersionedReference toVersion( ArtifactReference artifactReference )
     {
         return null;
@@ -77,25 +83,31 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
     }
 
     @Override
-    public void deleteVersion( VersionedReference reference ) throws 
ContentNotFoundException
+    public void deleteVersion( VersionedReference reference ) throws 
ContentNotFoundException, ContentAccessException
+    {
+
+    }
+
+    @Override
+    public void deleteArtifact( ArtifactReference artifactReference ) throws 
ContentNotFoundException, ContentAccessException
     {
 
     }
 
     @Override
-    public void deleteArtifact( ArtifactReference artifactReference ) throws 
ContentNotFoundException
+    public void deleteGroupId( String groupId ) throws 
ContentNotFoundException, ContentAccessException
     {
 
     }
 
     @Override
-    public void deleteGroupId( String groupId ) throws ContentNotFoundException
+    public void deleteProject( String namespace, String projectId ) throws 
ContentNotFoundException, ContentAccessException
     {
 
     }
 
     @Override
-    public void deleteProject( String namespace, String projectId ) throws 
RepositoryException
+    public void deleteProject( ProjectReference reference ) throws 
ContentNotFoundException, ContentAccessException
     {
 
     }
@@ -107,19 +119,25 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
     }
 
     @Override
-    public List<ArtifactReference> getRelatedArtifacts( ArtifactReference 
reference ) throws ContentNotFoundException, LayoutException
+    public List<ArtifactReference> getRelatedArtifacts( ArtifactReference 
reference ) throws ContentNotFoundException, LayoutException, 
ContentAccessException
     {
         return null;
     }
 
     @Override
-    public List<StorageAsset> getRelatedAssets( ArtifactReference reference ) 
throws ContentNotFoundException, LayoutException
+    public List<ArtifactReference> getRelatedArtifacts( VersionedReference 
reference ) throws ContentNotFoundException, LayoutException, 
ContentAccessException
     {
         return null;
     }
 
     @Override
-    public List<ArtifactReference> getArtifacts( VersionedReference reference 
) throws ContentNotFoundException, LayoutException
+    public List<StorageAsset> getRelatedAssets( ArtifactReference reference ) 
throws ContentNotFoundException, LayoutException, ContentAccessException
+    {
+        return null;
+    }
+
+    @Override
+    public List<ArtifactReference> getArtifacts( VersionedReference reference 
) throws ContentNotFoundException, LayoutException, ContentAccessException
     {
         return null;
     }
@@ -148,31 +166,31 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
     }
 
     @Override
-    public Set<String> getVersions( ProjectReference reference ) throws 
ContentNotFoundException, LayoutException
+    public Set<String> getVersions( ProjectReference reference ) throws 
ContentNotFoundException, LayoutException, ContentAccessException
     {
         return null;
     }
 
     @Override
-    public Set<String> getVersions( VersionedReference reference ) throws 
ContentNotFoundException
+    public Set<String> getVersions( VersionedReference reference ) throws 
ContentNotFoundException, ContentAccessException, LayoutException
     {
         return null;
     }
 
     @Override
-    public boolean hasContent( ArtifactReference reference )
+    public boolean hasContent( ArtifactReference reference ) throws 
ContentAccessException
     {
         return false;
     }
 
     @Override
-    public boolean hasContent( ProjectReference reference )
+    public boolean hasContent( ProjectReference reference ) throws 
ContentAccessException
     {
         return false;
     }
 
     @Override
-    public boolean hasContent( VersionedReference reference )
+    public boolean hasContent( VersionedReference reference ) throws 
ContentAccessException
     {
         return false;
     }
@@ -183,6 +201,12 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
         this.repository = repo;
     }
 
+    @Override
+    public StorageAsset toFile( VersionedReference reference )
+    {
+        return null;
+    }
+
     private Map<ArtifactReference, String> refs = new HashMap<>();
 
     @Override
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
 
b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
index 3aba949..f263345 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-proxy/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java
@@ -69,6 +69,12 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
     }
 
     @Override
+    public VersionedReference toGenericVersion( ArtifactReference 
artifactReference )
+    {
+        return null;
+    }
+
+    @Override
     public VersionedReference toVersion( ArtifactReference artifactReference )
     {
         return null;
@@ -81,25 +87,31 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
     }
 
     @Override
-    public void deleteVersion( VersionedReference reference ) throws 
ContentNotFoundException
+    public void deleteVersion( VersionedReference reference ) throws 
ContentNotFoundException, ContentAccessException
+    {
+
+    }
+
+    @Override
+    public void deleteArtifact( ArtifactReference artifactReference ) throws 
ContentNotFoundException, ContentAccessException
     {
 
     }
 
     @Override
-    public void deleteArtifact( ArtifactReference artifactReference ) throws 
ContentNotFoundException
+    public void deleteGroupId( String groupId ) throws 
ContentNotFoundException, ContentAccessException
     {
 
     }
 
     @Override
-    public void deleteGroupId( String groupId ) throws ContentNotFoundException
+    public void deleteProject( String namespace, String projectId ) throws 
ContentNotFoundException, ContentAccessException
     {
 
     }
 
     @Override
-    public void deleteProject( String namespace, String projectId ) throws 
RepositoryException
+    public void deleteProject( ProjectReference reference ) throws 
ContentNotFoundException, ContentAccessException
     {
 
     }
@@ -111,19 +123,25 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
     }
 
     @Override
-    public List<ArtifactReference> getRelatedArtifacts( ArtifactReference 
reference ) throws ContentNotFoundException, LayoutException
+    public List<ArtifactReference> getRelatedArtifacts( ArtifactReference 
reference ) throws ContentNotFoundException, LayoutException, 
ContentAccessException
     {
         return null;
     }
 
     @Override
-    public List<StorageAsset> getRelatedAssets( ArtifactReference reference ) 
throws ContentNotFoundException, LayoutException
+    public List<ArtifactReference> getRelatedArtifacts( VersionedReference 
reference ) throws ContentNotFoundException, LayoutException, 
ContentAccessException
     {
         return null;
     }
 
     @Override
-    public List<ArtifactReference> getArtifacts( VersionedReference reference 
) throws ContentNotFoundException, LayoutException
+    public List<StorageAsset> getRelatedAssets( ArtifactReference reference ) 
throws ContentNotFoundException, LayoutException, ContentAccessException
+    {
+        return null;
+    }
+
+    @Override
+    public List<ArtifactReference> getArtifacts( VersionedReference reference 
) throws ContentNotFoundException, LayoutException, ContentAccessException
     {
         return null;
     }
@@ -152,31 +170,31 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
     }
 
     @Override
-    public Set<String> getVersions( ProjectReference reference ) throws 
ContentNotFoundException, LayoutException
+    public Set<String> getVersions( ProjectReference reference ) throws 
ContentNotFoundException, LayoutException, ContentAccessException
     {
         return null;
     }
 
     @Override
-    public Set<String> getVersions( VersionedReference reference ) throws 
ContentNotFoundException
+    public Set<String> getVersions( VersionedReference reference ) throws 
ContentNotFoundException, ContentAccessException, LayoutException
     {
         return null;
     }
 
     @Override
-    public boolean hasContent( ArtifactReference reference )
+    public boolean hasContent( ArtifactReference reference ) throws 
ContentAccessException
     {
         return false;
     }
 
     @Override
-    public boolean hasContent( ProjectReference reference )
+    public boolean hasContent( ProjectReference reference ) throws 
ContentAccessException
     {
         return false;
     }
 
     @Override
-    public boolean hasContent( VersionedReference reference )
+    public boolean hasContent( VersionedReference reference ) throws 
ContentAccessException
     {
         return false;
     }
@@ -187,6 +205,12 @@ public class ManagedRepositoryContentMock implements 
ManagedRepositoryContent
         this.repository = repo;
     }
 
+    @Override
+    public StorageAsset toFile( VersionedReference reference )
+    {
+        return null;
+    }
+
     private Map<ArtifactReference, String> refs = new HashMap<>();
 
     @Override
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
index 6336d0a..ba14ac0 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java
@@ -20,7 +20,6 @@ package org.apache.archiva.repository.content.maven2;
  */
 
 import org.apache.archiva.common.filelock.FileLockManager;
-import org.apache.archiva.common.utils.PathUtil;
 import org.apache.archiva.common.utils.VersionUtil;
 import org.apache.archiva.configuration.FileTypes;
 import 
org.apache.archiva.metadata.repository.storage.maven2.ArtifactMappingProvider;
@@ -29,12 +28,12 @@ import org.apache.archiva.model.ArchivaArtifact;
 import org.apache.archiva.model.ArtifactReference;
 import org.apache.archiva.model.ProjectReference;
 import org.apache.archiva.model.VersionedReference;
+import org.apache.archiva.repository.ContentAccessException;
 import org.apache.archiva.repository.ContentNotFoundException;
 import org.apache.archiva.repository.EditableManagedRepository;
 import org.apache.archiva.repository.LayoutException;
 import org.apache.archiva.repository.ManagedRepository;
 import org.apache.archiva.repository.ManagedRepositoryContent;
-import org.apache.archiva.repository.RepositoryException;
 import org.apache.archiva.repository.storage.StorageAsset;
 import org.apache.commons.lang3.StringUtils;
 
@@ -44,10 +43,10 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -94,11 +93,13 @@ public class ManagedDefaultRepositoryContent
      */
     @Override
     public VersionedReference toVersion( String groupId, String artifactId, 
String version ) {
-        VersionedReference ref = new VersionedReference();
-        ref.setGroupId(groupId);
-        ref.setArtifactId(artifactId);
-        ref.setVersion(version);
-        return ref;
+        return new VersionedReference().groupId( groupId ).artifactId( 
artifactId ).version( version );
+    }
+
+    @Override
+    public VersionedReference toGenericVersion( ArtifactReference 
artifactReference )
+    {
+        return toVersion( artifactReference.getGroupId( ), 
artifactReference.getArtifactId( ), VersionUtil.getBaseVersion( 
artifactReference.getVersion( ) ));
     }
 
     /**
@@ -107,102 +108,133 @@ public class ManagedDefaultRepositoryContent
      * @return
      */
     public VersionedReference toVersion( ArtifactReference artifactReference) {
-        return toVersion( artifactReference.getGroupId( ), 
artifactReference.getArtifactId( ), VersionUtil.getBaseVersion( 
artifactReference.getVersion( ) ));
+        return toVersion( artifactReference.getGroupId( ), 
artifactReference.getArtifactId( ), artifactReference.getVersion( ) );
     }
 
     @Override
     public ArtifactReference toArtifact( String groupId, String artifactId, 
String version, String type, String classifier) {
-        ArtifactReference ar = new ArtifactReference( );
-        ar.setGroupId( groupId );
-        ar.setArtifactId( artifactId );
-        ar.setVersion( version );
-        ar.setType( type );
-        ar.setClassifier( classifier );
-        return ar;
+        return new ArtifactReference( ).groupId( groupId ).artifactId( 
artifactId ).version( version ).type( type ).classifier( classifier );
     }
 
 
     @Override
-    public void deleteVersion( VersionedReference reference )
+    public void deleteVersion( VersionedReference ref ) throws 
ContentNotFoundException, ContentAccessException
     {
-        Path projectDir = getRepoDir().resolve(toPath(reference));
-        if ( Files.exists(projectDir) && Files.isDirectory(projectDir) )
+        final String path = toPath( ref );
+        final Path deleteTarget = getRepoDir().resolve(path);
+        if ( !Files.exists(deleteTarget) )
         {
-            org.apache.archiva.common.utils.FileUtils.deleteQuietly( 
projectDir );
+            log.warn( "Version path for repository {} does not exist: {}", 
getId(), deleteTarget );
+            throw new ContentNotFoundException( "Version not found for 
repository "+getId()+": "+path );
+        }
+        if ( Files.isDirectory(deleteTarget) )
+        {
+            try
+            {
+                org.apache.archiva.common.utils.FileUtils.deleteDirectory( 
deleteTarget );
+            }
+            catch ( IOException e )
+            {
+                log.error( "Could not delete file path {}: {}", deleteTarget, 
e.getMessage( ), e );
+                throw new ContentAccessException( "Error while trying to 
delete path "+path+" from repository "+getId()+": "+e.getMessage( ), e );
+            }
+        } else {
+            log.warn( "Version path for repository {} is not a directory {}", 
getId(), deleteTarget );
+            throw new ContentNotFoundException( "Version path for repository 
"+getId()+" is not directory: " + path );
         }
     }
 
     @Override
-    public void deleteProject( String namespace, String projectId )
-        throws RepositoryException
+    public void deleteProject( ProjectReference ref )
+        throws ContentNotFoundException, ContentAccessException
     {
-        ProjectReference ref = new ProjectReference( );
-        ref.setGroupId( namespace );
-        ref.setArtifactId( projectId );
-        Path projDirectory = getRepoDir( ).resolve( toPath(ref) );
-        if ( !Files.exists(projDirectory) )
+        final String path = toPath( ref );
+        final Path deleteTarget = getRepoDir( ).resolve( path );
+        if ( !Files.exists(deleteTarget) )
         {
-            throw new ContentNotFoundException( "cannot found project " + 
namespace + ":" + projectId );
+            log.warn( "Project path for repository {} does not exist: {}", 
getId(), deleteTarget );
+            throw new ContentNotFoundException( "Project not found for 
repository "+getId()+": "+path );
         }
-        if ( Files.isDirectory(projDirectory) )
+        if ( Files.isDirectory(deleteTarget) )
         {
             try
             {
-                org.apache.archiva.common.utils.FileUtils.deleteDirectory( 
projDirectory );
+                org.apache.archiva.common.utils.FileUtils.deleteDirectory( 
deleteTarget );
             }
             catch ( IOException e )
             {
-                throw new RepositoryException( e.getMessage(), e );
+                log.error( "Could not delete file path {}: {}", deleteTarget, 
e.getMessage( ), e );
+                throw new ContentAccessException( "Error while trying to 
delete path "+path+" from repository "+getId()+": "+e.getMessage( ), e );
             }
         }
         else
         {
-            log.warn( "project {}:{} is not a directory", namespace, projectId 
);
+            log.warn( "Project path for repository {} is not a directory {}", 
getId(), deleteTarget );
+            throw new ContentNotFoundException( "Project path for repository 
"+getId()+" is not directory: " + path );
         }
 
     }
 
     @Override
-    public void deleteArtifact( ArtifactReference artifactReference )
+    public void deleteProject( String namespace, String projectId ) throws 
ContentNotFoundException, ContentAccessException
     {
-        final Path repoDir = getRepoDir( );
-        Path filePath = repoDir.resolve( toPath( artifactReference ) );
-        Path parentPath = filePath.getParent( );
-        if ( Files.exists(filePath) )
-        {
-            org.apache.archiva.common.utils.FileUtils.deleteQuietly( filePath 
);
-        }
-
-        Path filePathmd5 = parentPath.resolve( 
filePath.getFileName().toString()+".md5" );
+        this.deleteProject( new ProjectReference().groupId( namespace 
).artifactId( projectId ) );
+    }
 
-        if ( Files.exists(filePathmd5) )
+    @Override
+    public void deleteArtifact( ArtifactReference ref ) throws 
ContentNotFoundException, ContentAccessException
+    {
+        final String path = toPath( ref );
+        final Path repoDir = getRepoDir( );
+        Path deleteTarget = repoDir.resolve( path );
+        if ( Files.exists(deleteTarget) )
         {
-            org.apache.archiva.common.utils.FileUtils.deleteQuietly( 
filePathmd5 );
+            try
+            {
+                if (Files.isDirectory( deleteTarget ))
+                {
+                    org.apache.archiva.common.utils.FileUtils.deleteDirectory( 
deleteTarget );
+                } else {
+                    Files.delete( deleteTarget );
+                }
+            }
+            catch ( IOException e )
+            {
+                log.error( "Could not delete file path {}: {}", deleteTarget, 
e.getMessage( ), e );
+                throw new ContentAccessException( "Error while trying to 
delete path "+path+" from repository "+getId()+": "+e.getMessage( ), e );
+            }
+        } else {
+            log.warn( "Artifact path for repository {} does not exist: {}", 
getId(), deleteTarget );
+            throw new ContentNotFoundException( "Artifact not found for 
repository "+getId()+": "+path );
         }
 
-        Path filePathsha1 = parentPath.resolve( 
filePath.getFileName().toString()+ ".sha1" );
-
-        if ( Files.exists(filePathsha1) )
-        {
-            org.apache.archiva.common.utils.FileUtils.deleteQuietly( 
filePathsha1 );
-        }
     }
 
     @Override
     public void deleteGroupId( String groupId )
-        throws ContentNotFoundException
+        throws ContentNotFoundException, ContentAccessException
     {
-        Path directory = getRepoDir( ).resolve( toPath( groupId ) );
-        if ( Files.exists(directory) )
+        final String path = toPath( groupId );
+        final Path deleteTarget = getRepoDir( ).resolve( path );
+        if (!Files.exists(deleteTarget)) {
+            log.warn( "Namespace path for repository {} does not exist: {}", 
getId(), deleteTarget );
+            throw new ContentNotFoundException( "Namespace not found for 
repository "+getId()+": "+path );
+        }
+        if ( Files.isDirectory(deleteTarget) )
         {
             try
             {
-                org.apache.archiva.common.utils.FileUtils.deleteDirectory( 
directory );
+                org.apache.archiva.common.utils.FileUtils.deleteDirectory( 
deleteTarget );
             }
             catch ( IOException e )
             {
-                log.warn( "skip error deleting directory {}:", directory, e );
+                log.error( "Could not delete file path {}: {}", deleteTarget, 
e.getMessage( ), e );
+                throw new ContentAccessException( "Error while trying to 
delete path "+path+" from repository "+getId()+": "+e.getMessage( ), e );
             }
+        } else {
+            log.warn( "Namespace path for repository {} is not a directory 
{}", getId(), deleteTarget );
+            throw new ContentNotFoundException( "Namespace path for repository 
"+getId()+" is not directory: " + path );
+
         }
     }
 
@@ -213,27 +245,25 @@ public class ManagedDefaultRepositoryContent
     }
 
     @Override
-    public List<ArtifactReference> getRelatedArtifacts( ArtifactReference 
reference )
-        throws ContentNotFoundException, LayoutException
+    public List<ArtifactReference> getRelatedArtifacts( VersionedReference 
reference )
+        throws ContentNotFoundException, LayoutException, 
ContentAccessException
     {
-        StorageAsset artifactFile = toFile( reference );
-        StorageAsset repoDir = artifactFile.getParent();
-
-        if ( !repoDir.exists())
+        StorageAsset artifactDir = toFile( reference );
+        if ( !artifactDir.exists())
         {
             throw new ContentNotFoundException(
-                "Unable to get related artifacts using a non-existant 
directory: " + repoDir.getPath() );
+                "Unable to get related artifacts using a non-existant 
directory: " + artifactDir.getPath() );
         }
 
-        if ( !repoDir.isContainer() )
+        if ( !artifactDir.isContainer() )
         {
             throw new ContentNotFoundException(
-                "Unable to get related artifacts using a non-directory: " + 
repoDir.getPath() );
+                "Unable to get related artifacts using a non-directory: " + 
artifactDir.getPath() );
         }
 
         // First gather up the versions found as artifacts in the managed 
repository.
 
-        try (Stream<StorageAsset> stream = repoDir.list().stream() ) {
+        try (Stream<StorageAsset> stream = artifactDir.list().stream() ) {
             return stream.filter(asset -> !asset.isContainer()).map(path -> {
                 try {
                     ArtifactReference artifact = 
toArtifactReference(path.getPath());
@@ -248,11 +278,125 @@ public class ManagedDefaultRepositoryContent
                     return null;
                 }
             }).filter(Objects::nonNull).collect(Collectors.toList());
+        } catch (RuntimeException e) {
+            Throwable cause = e.getCause( );
+            if (cause!=null) {
+                if (cause instanceof LayoutException) {
+                    throw (LayoutException)cause;
+                } else
+                {
+                    throw new ContentAccessException( cause.getMessage( ), 
cause );
+                }
+            } else {
+                throw new ContentAccessException( e.getMessage( ), e );
+            }
+        }
+    }
+
+    /*
+     * Create the filter for various combinations of classifier and type
+     */
+    private Predicate<ArtifactReference> getChecker(ArtifactReference 
referenceObject, String extension) {
+        // TODO: Check, if extension is the correct parameter here
+        // We compare type with extension which works for artifacts like 
.jar.md5 but may
+        // be not the best way.
+
+        if (referenceObject.getClassifier()!=null && 
referenceObject.getType()!=null) {
+            return ((ArtifactReference a) ->
+                referenceObject.getGroupId().equals( a.getGroupId() )
+                && referenceObject.getArtifactId().equals( a.getArtifactId() )
+                && referenceObject.getVersion( ).equals( a.getVersion( ) )
+                && ( (a.getType()==null)
+                    || referenceObject.getType().equals( a.getType() )
+                    || a.getType().startsWith(extension) )
+                && referenceObject.getClassifier().equals( a.getClassifier() )
+            );
+        } else if (referenceObject.getClassifier()!=null && 
referenceObject.getType()==null){
+            return ((ArtifactReference a) ->
+                referenceObject.getGroupId().equals( a.getGroupId() )
+                    && referenceObject.getArtifactId().equals( 
a.getArtifactId() )
+                    && referenceObject.getVersion( ).equals( a.getVersion( ) )
+                    && referenceObject.getClassifier().equals( 
a.getClassifier() )
+            );
+        } else if (referenceObject.getClassifier()==null && 
referenceObject.getType()!=null){
+            return ((ArtifactReference a) ->
+                referenceObject.getGroupId().equals( a.getGroupId() )
+                    && referenceObject.getArtifactId().equals( 
a.getArtifactId() )
+                    && referenceObject.getVersion( ).equals( a.getVersion( ) )
+                    && ( (a.getType()==null)
+                    || referenceObject.getType().equals( a.getType() )
+                    || a.getType().startsWith(extension) )
+            );
+        } else {
+            return ((ArtifactReference a) ->
+                referenceObject.getGroupId().equals( a.getGroupId() )
+                    && referenceObject.getArtifactId().equals( 
a.getArtifactId() )
+                    && referenceObject.getVersion( ).equals( a.getVersion( ) )
+            );
         }
+
+
     }
 
     @Override
-    public List<StorageAsset> getRelatedAssets( ArtifactReference reference ) 
throws ContentNotFoundException, LayoutException
+    public List<ArtifactReference> getRelatedArtifacts( ArtifactReference 
reference )
+        throws ContentNotFoundException, LayoutException, 
ContentAccessException
+    {
+        if ( StringUtils.isEmpty( reference.getType() ) && 
StringUtils.isEmpty( reference.getClassifier() ) ) {
+            return getRelatedArtifacts( toVersion( reference ) );
+        }
+
+        StorageAsset artifactFile = toFile( reference );
+        StorageAsset repoDir = artifactFile.getParent();
+        String ext;
+        if (!artifactFile.isContainer()) {
+            ext = StringUtils.substringAfterLast( artifactFile.getName(), ".");
+        } else {
+            ext = "";
+        }
+
+        if ( !repoDir.exists())
+        {
+            throw new ContentNotFoundException(
+                "Unable to get related artifacts using a non-existant 
directory: " + repoDir.getPath() );
+        }
+
+        if ( !repoDir.isContainer() )
+        {
+            throw new ContentNotFoundException(
+                "Unable to get related artifacts using a non-directory: " + 
repoDir.getPath() );
+        }
+
+        // First gather up the versions found as artifacts in the managed 
repository.
+
+        try (Stream<StorageAsset> stream = repoDir.list().stream() ) {
+            return stream.filter(
+                asset -> !asset.isContainer())
+                .map(path -> {
+                try {
+                    return toArtifactReference(path.getPath());
+                } catch (LayoutException e) {
+                    log.debug( "Not processing file that is not an artifact: 
{}", e.getMessage() );
+                    return null;
+                }
+            }).filter(Objects::nonNull).filter(getChecker( reference, ext 
)).collect(Collectors.toList());
+        } catch (RuntimeException e) {
+            Throwable cause = e.getCause( );
+            if (cause!=null) {
+                if (cause instanceof LayoutException) {
+                    throw (LayoutException)cause;
+                } else
+                {
+                    throw new ContentAccessException( cause.getMessage( ), 
cause );
+                }
+            } else {
+                throw new ContentAccessException( e.getMessage( ), e );
+            }
+        }
+    }
+
+    @Override
+    public List<StorageAsset> getRelatedAssets( ArtifactReference reference ) 
throws ContentNotFoundException, LayoutException, ContentAccessException
     {
         return null;
     }
@@ -288,19 +432,20 @@ public class ManagedDefaultRepositoryContent
      */
     @Override
     public Set<String> getVersions( ProjectReference reference )
-        throws ContentNotFoundException, LayoutException
+        throws ContentNotFoundException, LayoutException, 
ContentAccessException
     {
+        final String path = toPath( reference );
         final Path projDir = getRepoDir().resolve(toPath(reference));
         if ( !Files.exists(projDir) )
         {
             throw new ContentNotFoundException(
-                "Unable to get Versions on a non-existant directory: " + 
projDir.toAbsolutePath() );
+                "Unable to get Versions on a non-existant directory for 
repository "+getId()+": " + path );
         }
 
         if ( !Files.isDirectory(projDir) )
         {
             throw new ContentNotFoundException(
-                "Unable to get Versions on a non-directory: " + 
projDir.toAbsolutePath() );
+                "Unable to get Versions on a non-directory for repository 
"+getId()+": " + path );
         }
 
         final String groupId = reference.getGroupId();
@@ -312,45 +457,50 @@ public class ManagedDefaultRepositoryContent
                     .collect(Collectors.toSet());
         } catch (IOException e) {
             log.error("Could not read directory {}: {}", projDir, 
e.getMessage(), e);
+            throw new ContentAccessException( "Could not read path for 
repository "+getId()+": "+ path, e );
         } catch (RuntimeException e) {
-            if (e.getCause()!=null)
+            Throwable cause = e.getCause( );
+            if (cause!=null)
             {
-                if ( e.getCause( ) instanceof LayoutException )
+                if ( cause instanceof LayoutException )
                 {
-                    throw (LayoutException) e.getCause( );
+                    throw (LayoutException) cause;
+                } else {
+                    log.error("Could not read directory {}: {}", projDir, 
cause.getMessage(), cause);
+                    throw new ContentAccessException( "Could not read path for 
repository "+getId()+": "+ path, cause );
                 }
-            }else {
-                throw e;
+            } else {
+                log.error("Could not read directory {}: {}", projDir, 
e.getMessage(), e);
+                throw new ContentAccessException( "Could not read path for 
repository "+getId()+": "+ path, cause );
             }
         }
-        return Collections.emptySet();
     }
 
     @Override
     public Set<String> getVersions( VersionedReference reference )
-        throws ContentNotFoundException
+        throws ContentNotFoundException, ContentAccessException, 
LayoutException
     {
         try(Stream<ArtifactReference> stream = getArtifactStream( reference ))
         {
             return stream.filter( Objects::nonNull )
                 .map( ar -> ar.getVersion( ) )
                 .collect( Collectors.toSet( ) );
-        }
-        catch ( LayoutException | IOException e )
-        {
-            throw new ContentNotFoundException( e.getMessage( ), e );
+        } catch (IOException e) {
+            final String path = toPath( reference );
+            log.error("Could not read directory from repository {} - {}: ", 
getId(), path, e.getMessage(), e);
+            throw new ContentAccessException( "Could not read path for 
repository "+getId()+": "+ path, e );
         }
     }
 
     @Override
-    public boolean hasContent( ArtifactReference reference )
+    public boolean hasContent( ArtifactReference reference ) throws 
ContentAccessException
     {
         StorageAsset artifactFile = toFile( reference );
         return artifactFile.exists() && !artifactFile.isContainer();
     }
 
     @Override
-    public boolean hasContent( ProjectReference reference )
+    public boolean hasContent( ProjectReference reference ) throws 
ContentAccessException
     {
         try
         {
@@ -364,16 +514,22 @@ public class ManagedDefaultRepositoryContent
     }
 
     @Override
-    public boolean hasContent( VersionedReference reference )
+    public boolean hasContent( VersionedReference reference ) throws 
ContentAccessException
     {
         try
         {
             return ( getFirstArtifact( reference ) != null );
         }
-        catch ( IOException | LayoutException | ContentNotFoundException e )
+        catch ( LayoutException | ContentNotFoundException e )
         {
             return false;
         }
+        catch ( IOException e )
+        {
+            String path = toPath( reference );
+            log.error("Could not read directory from repository {} - {}: ", 
getId(), path, e.getMessage(), e);
+            throw new ContentAccessException( "Could not read path from 
repository " + getId( ) + ": " + path, e );
+        }
     }
 
     @Override
@@ -439,6 +595,12 @@ public class ManagedDefaultRepositoryContent
         return repository.getAsset( toPath( reference ) );
     }
 
+    @Override
+    public StorageAsset toFile( VersionedReference reference )
+    {
+        return repository.getAsset( toPath( reference ) );
+    }
+
     /**
      * Get the first Artifact found in the provided VersionedReference 
location.
      *
@@ -481,15 +643,17 @@ public class ManagedDefaultRepositoryContent
                 .map(this::toArtifactRef);
     }
 
-    public List<ArtifactReference> getArtifacts(VersionedReference reference) 
throws ContentNotFoundException, LayoutException
+    public List<ArtifactReference> getArtifacts(VersionedReference reference) 
throws ContentNotFoundException, LayoutException, ContentAccessException
     {
         try (Stream<ArtifactReference> stream = getArtifactStream( reference ))
         {
             return stream.collect( Collectors.toList( ) );
         } catch ( IOException e )
         {
-            log.error( "Could not access the repository files: ", 
e.getMessage( ), e );
-            throw new ContentNotFoundException( e.getMessage( ), e );
+            String path = toPath( reference );
+            log.error("Could not read directory from repository {} - {}: ", 
getId(), path, e.getMessage(), e);
+            throw new ContentAccessException( "Could not read path from 
repository " + getId( ) + ": " + path, e );
+
         }
     }
 
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/ManagedDefaultRepositoryContentTest.java
 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/ManagedDefaultRepositoryContentTest.java
index c921adf..03a9b42 100644
--- 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/ManagedDefaultRepositoryContentTest.java
+++ 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/ManagedDefaultRepositoryContentTest.java
@@ -279,7 +279,7 @@ public class ManagedDefaultRepositoryContentTest
     }
 
     @Test
-    public void testDeleteArtifactWithType() throws IOException
+    public void testDeleteArtifactWithType() throws IOException, 
org.apache.archiva.repository.ContentNotFoundException, 
org.apache.archiva.repository.ContentAccessException
     {
         Path deleteRepo = setupRepoCopy( "delete-repository", 
"delete-repository-2" );
         assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) );
@@ -298,8 +298,8 @@ public class ManagedDefaultRepositoryContentTest
 
         assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) );
         assertFalse( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar" ) ) );
-        assertFalse( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar.md5" ) ) );
-        assertFalse( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar.sha1" ) ) );
+        assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar.md5" ) ) );
+        assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar.sha1" ) ) );
         assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.pom" ) ) );
 
 
@@ -307,7 +307,7 @@ public class ManagedDefaultRepositoryContentTest
 
 
     @Test
-    public void testDeleteArtifactWithClassifier() throws IOException
+    public void testDeleteArtifactWithClassifier() throws IOException, 
org.apache.archiva.repository.ContentNotFoundException, 
org.apache.archiva.repository.ContentAccessException
     {
         Path deleteRepo = setupRepoCopy( "default-repository", 
"default-repository-2" );
         assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) );
@@ -327,7 +327,7 @@ public class ManagedDefaultRepositoryContentTest
         repoContent.deleteArtifact( ref );
 
         assertFalse( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) );
-        assertFalse( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar.sha1" ) ) );
+        assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar.sha1" ) ) );
         assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar" ) ) );
         assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar.md5" ) ) );
         assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar.sha1" ) ) );
@@ -336,7 +336,7 @@ public class ManagedDefaultRepositoryContentTest
     }
 
     @Test
-    public void testDeleteArtifactWithoutType() throws IOException
+    public void testDeleteArtifactWithoutType() throws IOException, 
org.apache.archiva.repository.ContentNotFoundException, 
org.apache.archiva.repository.ContentAccessException
     {
         Path deleteRepo = setupRepoCopy( "default-repository", 
"default-repository-2" );
         assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) );
@@ -357,4 +357,41 @@ public class ManagedDefaultRepositoryContentTest
         assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar" ) ) );
 
     }
+
+
+    @Test
+    public void testDeleteVersion() throws IOException, 
org.apache.archiva.repository.ContentNotFoundException, 
org.apache.archiva.repository.ContentAccessException
+    {
+        Path deleteRepo = setupRepoCopy( "delete-repository", 
"delete-repository-2" );
+        assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) );
+        assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar" ) ) );
+        assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar.md5" ) ) );
+        assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar.sha1" ) ) );
+        assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.pom" ) ) );
+
+        VersionedReference ref = new VersionedReference( ).groupId( 
"org.apache.maven" ).artifactId( "samplejar" ).version( "1.0" );
+
+        repoContent.deleteVersion( ref );
+
+        assertFalse( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0" ) ) );
+
+    }
+
+    @Test
+    public void testDeleteProject() throws IOException, 
org.apache.archiva.repository.ContentNotFoundException, 
org.apache.archiva.repository.ContentAccessException
+    {
+        Path deleteRepo = setupRepoCopy( "delete-repository", 
"delete-repository-2" );
+        assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0-source.jar" ) ) );
+        assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar" ) ) );
+        assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar.md5" ) ) );
+        assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.jar.sha1" ) ) );
+        assertTrue( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0/samplejar-1.0.pom" ) ) );
+
+        ProjectReference ref = new ProjectReference( ).groupId( 
"org.apache.maven" ).artifactId( "samplejar" );
+
+        repoContent.deleteProject( ref );
+
+        assertFalse( Files.exists( deleteRepo.resolve( 
"org/apache/maven/samplejar/1.0" ) ) );
+
+    }
 }
diff --git 
a/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/log4j2-test.xml
 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/log4j2-test.xml
new file mode 100644
index 0000000..9457ae8
--- /dev/null
+++ 
b/archiva-modules/archiva-maven/archiva-maven-repository/src/test/resources/log4j2-test.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ 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.
+  -->
+<configuration>
+  <Properties>
+
+  </Properties>
+  <appenders>
+    <Console name="console" target="SYSTEM_OUT">
+      <PatternLayout pattern="%d{ISO8601_PERIOD} [%L] [%t] %-5level %logger{3} 
- %msg%n"/>
+    </Console>
+    <!--
+    <RandomAccessFile name="LogFile" fileName="target/test.log">
+      <PatternLayout pattern="%d{ISO8601_PERIOD} [%L] [%t] %-5level %logger{3} 
- %msg%n"/>
+    </RandomAccessFile>
+    -->
+  </appenders>
+  <loggers>
+    <logger name="org.apache.archiva" level="error"/>
+    <logger name="org.apache.archiva.maven" level="info"/>
+    <root level="error" includeLocation="true">
+      <appender-ref ref="console"/>
+    </root>
+  </loggers>
+</configuration>
\ No newline at end of file
diff --git 
a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
 
b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
index 4c6561b..c313cd9 100644
--- 
a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
+++ 
b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
@@ -96,7 +96,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
-import java.util.Set;
 import java.util.TimeZone;
 
 /**
@@ -684,7 +683,7 @@ public class DefaultRepositoriesService
 
             MetadataRepository metadataRepository = 
repositorySession.getRepository();
 
-            List<ArtifactReference> related = repository.getRelatedArtifacts( 
artifactReference );
+            List<ArtifactReference> related = repository.getRelatedArtifacts( 
repository.toVersion(artifactReference) );
             log.debug( "related: {}", related );
             for ( ArtifactReference artifactRef : related )
             {
@@ -793,7 +792,7 @@ public class DefaultRepositoriesService
             artifactReference.setGroupId( artifact.getGroupId() );
             artifactReference.setVersion( artifact.getVersion() );
             artifactReference.setClassifier( artifact.getClassifier() );
-            artifactReference.setType( artifact.getPackaging() );
+            artifactReference.setType( artifact.getType() );
 
             MetadataRepository metadataRepository = 
repositorySession.getRepository();
 
@@ -806,8 +805,10 @@ public class DefaultRepositoriesService
                     throw new ArchivaRestServiceException( "You must configure 
a type/packaging when using classifier",
                                                            400, null );
                 }
-
-                repository.deleteArtifact( artifactReference );
+                List<ArtifactReference> artifacts = 
repository.getRelatedArtifacts( artifactReference );
+                for (ArtifactReference aRef : artifacts ) {
+                    repository.deleteArtifact( aRef );
+                }
 
             }
             else
@@ -833,11 +834,18 @@ public class DefaultRepositoriesService
                 }
                 else
                 {
-                    List<ArtifactReference> related = 
repository.getRelatedArtifacts( artifactReference );
+                    // We are deleting all version related artifacts for a 
snapshot version
+                    VersionedReference versionRef = repository.toVersion( 
artifactReference );
+                    List<ArtifactReference> related = 
repository.getRelatedArtifacts( versionRef );
                     log.debug( "related: {}", related );
                     for ( ArtifactReference artifactRef : related )
                     {
-                        repository.deleteArtifact( artifactRef );
+                        try
+                        {
+                            repository.deleteArtifact( artifactRef );
+                        } catch (ContentNotFoundException e) {
+                            log.warn( "Artifact that should be deleted, was 
not found: {}", artifactRef );
+                        }
                     }
                     StorageAsset metadataFile = getMetadata( repo, 
targetPath.getPath() );
                     ArchivaRepositoryMetadata metadata = getMetadata( 
repository.getRepository().getType(), metadataFile );
diff --git 
a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
 
b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
index 99a8688..7b765c2 100644
--- 
a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
+++ 
b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/RepositoriesServiceTest.java
@@ -303,6 +303,7 @@ public class RepositoriesServiceTest
             artifact.setVersion( "1.0.1" );
             artifact.setClassifier( "javadoc" );
             artifact.setPackaging( "jar" );
+            artifact.setType( "javadoc" );
             artifact.setContext( SOURCE_REPO_ID );
 
             RepositoriesService repositoriesService = getRepositoriesService( 
authorizationHeader );
diff --git 
a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
 
b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
index 7c56f65..a2c90ec 100644
--- 
a/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
+++ 
b/archiva-modules/archiva-web/archiva-webdav/src/main/java/org/apache/archiva/webdav/ArchivaDavResourceFactory.java
@@ -40,7 +40,6 @@ import 
org.apache.archiva.indexer.merger.base.MergedRemoteIndexesTaskRequest;
 import org.apache.archiva.indexer.merger.TemporaryGroupIndex;
 import org.apache.archiva.indexer.search.RepositorySearch;
 import org.apache.archiva.indexer.search.RepositorySearchException;
-import org.apache.archiva.maven2.metadata.MavenMetadataReader;
 import org.apache.archiva.metadata.model.facets.AuditEvent;
 import org.apache.archiva.metadata.repository.storage.RelocationException;
 import org.apache.archiva.metadata.repository.storage.RepositoryStorage;
@@ -66,7 +65,6 @@ import org.apache.archiva.repository.ReleaseScheme;
 import org.apache.archiva.repository.RepositoryGroup;
 import org.apache.archiva.repository.RepositoryRegistry;
 import org.apache.archiva.repository.RepositoryRequestInfo;
-import org.apache.archiva.repository.storage.FilesystemAsset;
 import org.apache.archiva.repository.storage.FilesystemStorage;
 import org.apache.archiva.repository.storage.StorageAsset;
 import org.apache.archiva.metadata.audit.AuditListener;
@@ -104,7 +102,6 @@ import javax.inject.Inject;
 import javax.inject.Named;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
-import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
@@ -671,6 +668,10 @@ public class ArchivaDavResourceFactory
                     {
                         log.warn( "Artifact path '{}' is invalid.", 
resourcePath );
                     }
+                    catch ( 
org.apache.archiva.repository.ContentAccessException e )
+                    {
+                        e.printStackTrace( );
+                    }
                 }
 
                 /*

Reply via email to