[ 
https://issues.apache.org/jira/browse/FELIX-731?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12633769#action_12633769
 ] 

Stuart McCulloch commented on FELIX-731:
----------------------------------------

> Stuart, I am confused. Doesn't that patch attempt to decode, not encode, the 
> string?

Correct, we want to go from the encoded URL 
"...util-plan-deployer%201.0.8-SNAPSHOT.jar" to the decoded path 
"...util-plan-deployer 1.0.8-SNAPSHOT.jar", which is exactly the same as what 
the file URL handler does when the bundle is installed without the reference 
schema.

ie. at the moment:

   install file:/tmp/a%20b/foo.jar                          works
   install reference:file:/tmp/a%20b/foo.jar        doesn't work

> Even then, I don't think this encoding/decoding is going to do the trick for 
> us, since I imagine the created file name will end up taking the encoded 
> value literally.

it does work, I've tested it locally - the escaped %20 is translated back into 
the space which is what the filesystem expects.

> After closer inspection, this issue is not related to File at all.

well it is related to URLs, which shouldn't really contain spaces - the install 
command accepts a series of URLs so the spaces should be escaped (%20) - this 
patch is just making the reference: logic work the same way as the standard 
install code (the URL decoding in that case is done internally when the URL 
connection is opened when copying it to the cache)

> The issue is in the shell "install" command. It doesn't have a sophisticated 
> parser, so it only breaks up the command line at whitespaces, which cause the 
> line to be improperly parsed.

correct, but I think it's clearer to break the arguments on spaces and require 
that URLs are properly encoded - otherwise we could easily run into other 
problems because we're essentially creating our own encoding scheme which is 
different from the spec'd URL scheme.

> To solve this, we would need to make the parser understand the "\" escape 
> character and then you could escape the space.

the problem is that standard encoded URLs like "file:/tmp/a%20b/foo.jar" would 
still need decoding before they can be used as direct filenames.

> The install command uses StringTokenizer, which doesn't support escaping, and 
> to keep things simple we cannot go to the regex stuff.

we don't need to change the parser - just decode the URL path into a filesystem 
path...

> Installation of referenced files which contain whitepaces fails
> ---------------------------------------------------------------
>
>                 Key: FELIX-731
>                 URL: https://issues.apache.org/jira/browse/FELIX-731
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: felix-1.2.1

>         Environment: Windows XP
>            Reporter: François Fornaciari
>         Attachments: FELIX-731.patch
>
>
> The installation of bundles which contain whitespaces by using the reference 
> prefix fails.
> When not using the reference prefix, the solution is to replace whitespaces 
> by %20, 
> Unfortunately, the same approach does not fix the issue for referenced files. 
> Below the error message when installing a bundle with whitespaces:
> -> install 
> reference:file:D:/.m2/repository/org/ow2/bundles/util-plan-deployer/1.0.8-SNAPSHOT/util-plan-deployer
>  1.0.8-SNAPSHOT.jar
> java.io.IOException: Referenced file does not exist: 
> D:\.m2\repository\org\ow2\bundles\util-plan-deployer\1.0.8-SNAPSHOT\util-plan-deployer
> java.net.MalformedURLException: no protocol: 1.0.8-SNAPSHOT.jar
> Below the error message when installing a bundle by replacing whitespaces by 
> %20:
> -> install 
> reference:file:D:/.m2/repository/org/ow2/bundles/util-plan-deployer/1.0.8-SNAPSHOT/util-plan-deployer%201.0.8-SNAPSHOT.jar
> java.io.IOException: Referenced file does not exist: 
> D:\.m2\repository\org\ow2\bundles\util-plan-deployer\1.0.8-SNAPSHOT\util-plan-deployer%201.0.8-SNAPSHOT.jar

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to