Keith Wall created QPID-6588:
--------------------------------

             Summary: HTTP Management writes JSON responses using the 
platform's default encoding rather than UTF-8
                 Key: QPID-6588
                 URL: https://issues.apache.org/jira/browse/QPID-6588
             Project: Qpid
          Issue Type: Bug
          Components: Java Broker
    Affects Versions: 0.32, 0.22, 0.18
            Reporter: Keith Wall


The HTTP Management implementation writes JSON responses using the platform's 
default encoding rather than an encoding Uncode meaning characters outside 
ASCII may be lost.  It also breaks RFC7159, which states that "JSON text SHALL 
be encoded in UTF-8, UTF-16, or UTF-32.  The default  encoding is UTF-8")

The issue is that the implementation (MessageServlet, RestServlet) passes a 
Writer to the Jackson ObjectMapper and that Writer is an OutputStreamWriter 
that use the platform's default character encoding.  This effect of this is 
that any character that cannot be represented using the platform's default 
encoding will be converted to a '?'.  

{code:java}
final Writer writer = getOutputWriter(request,response);
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
mapper.writeValue(writer, object);
{code}

The solution is to configure the OutputStreamWriter with a  UTF-8 character 
encoding, or more simple pass the output stream to the Jackson mapper directly. 

[1] https://tools.ietf.org/html/rfc7159

This problem was exposed by the new tested added to MessagesRestTest QPID-6545. 
 The test would pass (for the wrong reasons under Intellij), then fail on the 
command line (persumably owing to platform encoding default differences).

 



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

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

Reply via email to