I am in favor of using file.toURI().toString(), as proposed by Rainer.

To construct an URL by simply prepending "file:" + several slashes to
the path is simply wrong.

Spaces are not allowed in an URL (see chapter 2.4.3 of RFC2396) and
must be encoded as %20, as well as % symbols in the file name must be
encoded as %25.

The protocol handler for file: protocol unescapes %-encoded symbols
when opening URLConnection to the file, so if the original file name
contained '%' symbol, it should have been escaped.

(sun.net.www.protocol.file.Handler#openConnection(..))

Best regards,
Konstantin Kolinko

2009/9/1 Rainer Jung <rainer.j...@kippdata.de>:
> On 01.09.2009 20:48, Larry Isaacs wrote:
>> Hi Filip,
>>
>> I have a vague recollection about tripping over this issue while working on 
>> the Tomcat support in the Eclipse Web Tools Platform.  WTP has its own 
>> version(s) of VirtualWebappLoader, called WtpWebappLoader, to address it.  
>> If I'm recalling the issue correctly, pre-pending "file:/" worked on 
>> Windows, but not on Linux since an absolute path ended up as 
>> "file://somedir/...".  I believe with the change below, pre-pending 
>> "file://" will work for Linux, but not for Windows, i.e. 
>> "file://C:/somedir/..." is going to have problems.  If it helps, I went with 
>> the URL form "file:/somedir/..." and used the following code snippet to get 
>> it working for Windows and Linux in WtpWebappLoader:
>
> Good point.
>
>>
>>             String path = file.getAbsolutePath();
>>             if (path.startsWith("/")) {
>>                 path = "file:" + path;
>>             } else {
>>                 path = "file:/" + path;
>>             }
>>             if (file.isDirectory()) {
>>                 addRepository(path + "/");
>>             } else {
>>                 addRepository(path);
>
> Why not: file.toURI().toString()
>
> It seems this is not cheap, but should handle as much annoyances as
> possible (drive letters, directory trailing slashes, UNC notation).
>
> Regards,
>
> Rainer
>
>>> -----Original Message-----
>>> From: fha...@apache.org [mailto:fha...@apache.org]
>>> Sent: Tuesday, September 01, 2009 1:22 PM
>>> To: dev@tomcat.apache.org
>>> Subject: svn commit: r810132 - /tomcat/tc6.0.x/trunk/STATUS.txt
>>>
>>> Author: fhanik
>>> Date: Tue Sep  1 17:21:59 2009
>>> New Revision: 810132
>>>
>>> URL: http://svn.apache.org/viewvc?rev=810132&view=rev
>>> Log:
>>> proposal
>>>
>>> Modified:
>>>     tomcat/tc6.0.x/trunk/STATUS.txt
>>>
>>> Modified: tomcat/tc6.0.x/trunk/STATUS.txt
>>> URL:
>>> http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/STATUS.txt?rev=810132
>>> &r1=810131&r2=810132&view=diff
>>> =======================================================================
>>> =======
>>> --- tomcat/tc6.0.x/trunk/STATUS.txt (original)
>>> +++ tomcat/tc6.0.x/trunk/STATUS.txt Tue Sep  1 17:21:59 2009
>>> @@ -321,3 +321,25 @@
>>>    +1: funkman
>>>    -1:
>>>
>>> +
>>> +* Fix VirtualWebappClassLoader file directives
>>> +  Index: java/org/apache/catalina/loader/VirtualWebappLoader.java
>>> +===================================================================
>>> +--- java/org/apache/catalina/loader/VirtualWebappLoader.java
>>>       (revision 810099)
>>> ++++ java/org/apache/catalina/loader/VirtualWebappLoader.java
>>>       (working copy)
>>> +@@ -92,9 +92,9 @@
>>> +                 continue;
>>> +             }
>>> +             if (file.isDirectory()) {
>>> +-                addRepository("file:/" + file.getAbsolutePath() +
>>> "/");
>>> ++                addRepository("file://" + file.getAbsolutePath() +
>>> "/");
>>> +             } else {
>>> +-                addRepository("file:/" + file.getAbsolutePath());
>>> ++                addRepository("file://" + file.getAbsolutePath());
>>> +             }
>>> +         }
>>> +
>>> +  +1: fhanik
>>> +  -1:
>>> +
>>> +
>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
>>> For additional commands, e-mail: dev-h...@tomcat.apache.org
>>>
>>
>>
>
> --
> kippdata
> informationstechnologie GmbH   Tel: 0228 98549 -0
> Bornheimer Str. 33a            Fax: 0228 98549 -50
> 53111 Bonn                     www.kippdata.de
>
> HRB 8018 Amtsgericht Bonn / USt.-IdNr. DE 196 457 417
> Geschäftsführer: Dr. Thomas Höfer, Rainer Jung, Sven Maurmann
> ===============================
> kippdata
> informationstechnologie GmbH   Tel: +49 228 98549 -0
> Bornheimer Str. 33a            Fax: +49 228 98549 -50
> D-53111 Bonn                   www.kippdata.de
>
> HRB 8018 Amtsgericht Bonn / USt.-IdNr. DE 196 457 417
> Geschäftsführer: Dr. Thomas Höfer, Rainer Jung, Sven Maurmann
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: dev-h...@tomcat.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to