Timur Alperovich created JCLOUDS-1008:
-----------------------------------------

             Summary: Google storage provider cannot retrieve "foo/bar"
                 Key: JCLOUDS-1008
                 URL: https://issues.apache.org/jira/browse/JCLOUDS-1008
             Project: jclouds
          Issue Type: Bug
          Components: jclouds-core, jclouds-labs-google
    Affects Versions: 1.9.1, 1.9.0, 2.0.0
            Reporter: Timur Alperovich


The Google cloud storage provider can PUT, but not GET a blob containing "/" in 
its name. When attempting to retrieve "foo/bar", _null_ is always returned.

The reason for this behavior is twofold. First, Google expects "/" in the path 
parameters to be percent-encoded. Secondly, jclouds-core does not have a way to 
express that a specific path parameter should be encoded prior to being added 
to the path.

Currently, the rest processor does the following for the endpoint: assemble all 
of the tokens together and call {code}urlEncode(){code} on the result. When it 
does so, it also skips encoding any "/" characters. If an encoded token is 
passed to the processor, it ends up being encoded twice, as the "%" character 
is encoded as %25.

jclouds-core should add {code}@Encoded{code} parameter annotation, which would 
encode each parameter individually (including any "/" characters) before 
assembling the URL. In this case, the consumers of the API must make sure that 
they do not need the entire path to be encoded.

I plan to submit a PR to add the annotation and to use it in the 
google-cloud-storage provider. When the annotation is not used, endpoints will 
be processed as is.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to