Url encoded strings never get decoded? How do we fix this?
----------------------------------------------------------

                 Key: THRIFT-885
                 URL: https://issues.apache.org/jira/browse/THRIFT-885
             Project: Thrift
          Issue Type: Bug
            Reporter: Jordan


This is for the test java server that was written to test the client. 
Suppose you have a method such as          testString(theTestString)
If you call it from the javascript like so:

client.testString("hello man");
The string that your server implementation sees will be all crazy and url 
encoded.

public static void testString(string theTestString) {
   // Inside here that string looks like "hello%20man".
}
We need it to be urlencoded when coming across the wire because we're using 
JSON as the protocol, but once it gets to thrift server code, it needs to be 
normal.

So what's going on here? Inside of strings (of javascript objects) things like 
quotes and spaces are escaped. This is fine, but I do not believe that is part 
of the TJSONProtocol. This is something that is specific to having a js thrift 
client am I right? So where do we fix this?

I'm not exactly sure what will work, but the following seemed to work mostly 
okay, but there are still bugs. I basically just strip out encoded parts from 
the entire message (even though the problem seems to only exist inside string 
fields.)

Around line 115.
<code>
                HttpEntity entity = ((HttpEntityEnclosingRequest) 
request).getEntity();
                byte[] entityContent = EntityUtils.toByteArray(entity);
                                String decodedEntityContentString = 
java.net.URLDecoder.decodeURIComponent(new String(entityContent, "UTF-8"));
                                byte[] decodedEntityContentBytes = 
decodedEntityContentString.getBytes("UTF-8");
                                System.out.println("Incoming content: " + new 
String(entityContent));
                                System.out.println("Incoming content 
normalized: " + new String(decodedEntityContentBytes, "UTF-8"));
                


                                // This almost works, except escaped quotes 
inside of strings
                               final String output = 
this.thriftRequest(decodedEntityContentBytes);

                                System.out.println("Outgoing content: "+output);
                
                                EntityTemplate body = new EntityTemplate(new 
ContentProducer() {

</code>

-- 
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