diff --git a/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java b/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java index 39bfe9b26..07b58c5bb 100644 --- a/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java +++ b/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java @@ -46,6 +46,7 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; +import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet.ServletException; @@ -161,7 +162,64 @@ public class ProxiedDavServer // TODO: [MRM-524] determine http caching options for other types of files (artifacts, sha1, md5, snapshots) - davServer.process( request, response ); + if( resourceExists( request ) ) + { + davServer.process( request, response ); + } + else + { + respondResourceMissing( request, response ); + } + } + + private void respondResourceMissing( DavServerRequest request, HttpServletResponse response ) + { + response.setStatus( HttpServletResponse.SC_NOT_FOUND ); + + try + { + StringBuffer missingUrl = new StringBuffer(); + missingUrl.append( request.getRequest().getScheme() ).append( "://" ); + missingUrl.append( request.getRequest().getServerName() ).append( ":" ); + missingUrl.append( request.getRequest().getServerPort() ); + missingUrl.append( request.getRequest().getServletPath() ); + // missingUrl.append( request.getRequest().getPathInfo() ); + + String message = "Error 404 Not Found"; + + PrintWriter out = new PrintWriter( response.getOutputStream() ); + + response.setContentType( "text/html; charset=\"UTF-8\"" ); + + out.println( "" ); + out.println( "
The following resource does not exist: " ); + out.print( missingUrl.toString() ); + out.println( "
" ); + + out.println( "" ); + + out.flush(); + } + catch ( IOException e ) + { + e.printStackTrace(); + } + } + + private boolean resourceExists( DavServerRequest request ) + { + String resource = request.getLogicalResource(); + File resourceFile = new File( managedRepository.getRepoRoot(), resource ); + return resourceFile.exists(); } private void fetchContentFromProxies( DavServerRequest request )