[ 
https://issues.apache.org/jira/browse/AXIS2-5489?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13631379#comment-13631379
 ] 

Miguel Ángel Francisco Fernández commented on AXIS2-5489:
---------------------------------------------------------

Of course, + is a legal character in a URL, but according to RFC 2396, which 
defines valid URI syntax, + is a reserved character in the query string, and it 
must be encoded: RFC 3986/ RFC1738 . The main part we're interested in is from 
3.4 Query Component: 


As web servers treat "+" as a space, if AXIS2 client does not encode the + 
symbol, how can I really send a real + symbol?

If you have a look at URLEncoder 
(http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLEncoder.html), you 
will see what transformations Java does:

 When encoding a String, the following rules apply:
    The alphanumeric characters "a" through "z", "A" through "Z" and "0" 
through "9" remain the same.
    The special characters ".", "-", "*", and "_" remain the same.
    The space character " " is converted into a plus sign "+".
    All other characters are unsafe and are first converted into one or more 
bytes using some encoding scheme. Then each byte is represented by the 
3-character string "%xy", where xy is the two-digit hexadecimal representation 
of the byte. The recommended encoding scheme to use is UTF-8. However, for 
compatibility reasons, if an encoding is not specified, then the default 
encoding of the platform is used. 
                
> Encoding GET parameters with '+' character in generated REST clients with 
> WSDL2Java
> -----------------------------------------------------------------------------------
>
>                 Key: AXIS2-5489
>                 URL: https://issues.apache.org/jira/browse/AXIS2-5489
>             Project: Axis2
>          Issue Type: Bug
>          Components: kernel, transports
>    Affects Versions: 1.6.2
>         Environment: Ubuntu
>            Reporter: Miguel Ángel Francisco Fernández
>            Priority: Blocker
>              Labels: +, GET, REST, encode,
>             Fix For: 1.6.2
>
>   Original Estimate: 2h
>  Remaining Estimate: 2h
>
> Using the wsdl2java tool to generate a Java client to access a REST web 
> service described with a WSDL 2.0, the generated client does not encode the 
> symbol '+' in GET parameters.
> For example, if I have an URL "/get_url", and I set the parameter "param" to 
> "x+x", the symbol "+" is not encoded, and therefore it is interpreted as a 
> space on the server ("x x"). If I try to send the parameter encoded, i.e., 
> "%2B", then "%252B" is received in the server.
> Therefore, it is not possible to send the '+' symbol in a GET parameter.
> I guess that it is caused by the definition of the field 
> LEGAL_CHARACTERS_IN_QUERY in the interface 
> org.apache.axis2.description.WSDL2Constants, which is set to 
> "-._~!$'()*+,;=:@/?"

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to