I traced this bug down to the the plexus-webdav code to this line.
this.base.lookup( resource ).toAsciiString();
base is a URI object, resource is the relative path (String) to the
resource.
At first look, this appears to be a bug in the java.net.URI object!!
(or at least an unexpected response from that object)
It was easier to put the logic on the archiva side.
Also, we can use the work from MRM-490 to make this a more pretty error. ;-)
- Joakim
Brett Porter wrote:
This couldn't be fixed in the webdav library, since there are related
changes being made there already?
Cheers,
Brett
On 16/10/2007, at 8:52 AM, [EMAIL PROTECTED] wrote:
Author: joakime
Date: Mon Oct 15 17:52:42 2007
New Revision: 584986
URL: http://svn.apache.org/viewvc?rev=584986&view=rev
Log:
[MRM-468] incorrect URL reported from failures in WebDAV
Corrected locally the error message being reported by it.could.webdav
Modified:
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java
Modified:
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java
URL:
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java?rev=584986&r1=584985&r2=584986&view=diff
==============================================================================
---
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java
(original)
+++
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java
Mon Oct 15 17:52:42 2007
@@ -46,6 +46,7 @@
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 @@
// 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( "<html>" );
+ out.println( "<head><title>" + message +
"</title></head>" );
+ out.println( "<body>" );
+
+ out.print( "<p><h1>" );
+ out.print( message );
+ out.println( "</h1></p>" );
+
+ out.print( "<p>The following resource does not exist: <a
href=\"" );
+ out.print( missingUrl.toString() );
+ out.println( "\">" );
+ out.print( missingUrl.toString() );
+ out.println( "</a></p>" );
+
+ out.println( "</body></html>" );
+
+ 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 )
--
Brett Porter - [EMAIL PROTECTED]
Blog: http://www.devzuz.org/blogs/bporter/
--
- Joakim Erdfelt
[EMAIL PROTECTED]
Open Source Software (OSS) Developer