Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-2285

TJsonProtocol implementation for Java doesn't allow a slash (/) to be escaped (\/)

    XMLWordPrintableJSON

Details

    Description

      We have PHP frontend and Java backend. Thrift is used for interaction between the two, entities are serialized and deserialized using TJsonProtocol.

      Whenever a string in a thrift entity contains a slash "/", PHP's implementation, that uses json_encode under the hood, escapes it:

      "Translation eng/rus" => "Translation eng\/rus". So the payload may look like this:

      {"1":{"str":"Translation  rus\/eng"}}
      

      (assuming that the entity only has this one string property)

      Java cannot handle this input and fails with:

      org.apache.thrift.protocol.TProtocolException: Expected control char

      Java does not allow a slash to be escaped.
      Thrift version is 0.9.1

      Any advice on what to do for a temporary solution? Should we fix Java side or PHP side?

      As per json.org, a slash CAN be escaped. To me it looks more like Java is not standard compliant in this case. At the same time, however, I don't like the ambiguity of the standard allowing both unescaped and escaped slash.

      Attachments

        Activity

          People

            jensg Jens Geyer
            lcf Alexander Steshenko
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: