synapse-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Heshan Suriyaarachchi (JIRA)" <>
Subject [jira] Updated: (SYNAPSE-662) ClientWorker overriding character encoding
Date Tue, 29 Jun 2010 11:40:50 GMT


Heshan Suriyaarachchi updated SYNAPSE-662:

    Attachment: SYNAPSE-662-patch.txt

  I went throught the HTTP 1.0[1] and HTTP 1.1[2] specifications. It does not say whether
to have a space between ";" and "charset" or not. Therefore we should support both the cases,
where there is a space or no-space. I could not think of a reason why the ClientWorker uses
following condition to set the CHARACTER_SET_ENCODING property. 

 responseMsgCtx.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, contentType.indexOf(HTTP.CHARSET_PARAM)
> 0 ? charSetEnc : MessageContext.DEFAULT_CHAR_SET_ENCODING);

Furthermore, the ServerWorker does not follow this approach and straight away retrieves the
CharSetEncoding and sets is as a property in the MessageContext. 
 String charSetEncoding = BuilderUtil.getCharSetEncoding(contentTypeStr);
 msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, charSetEncoding);

[1] -
[2] -

> ClientWorker overriding character encoding
> ------------------------------------------
>                 Key: SYNAPSE-662
>                 URL:
>             Project: Synapse
>          Issue Type: Bug
>    Affects Versions: 1.2
>            Reporter: Myles Bunbury
>         Attachments: SYNAPSE-662-patch.txt
> The following code exists in the org.apache.synapse.transport.nhttp.ClientWorker class'
run() method:
>                 responseMsgCtx.setProperty(
>                     Constants.Configuration.CHARACTER_SET_ENCODING,
>                     contentType.indexOf(HTTP.CHARSET_PARAM) > 0 ?
>                         charSetEnc : MessageContext.DEFAULT_CHAR_SET_ENCODING);
> This fails however for the following Content-Type HTTP header:
>   application/soap+xml; action="urn:echoResponse";charset=UTF-16
> BuilderUtil.getCharSetEncoding(contentType) is called a few lines up and correctly extracts
the UTF-16 character set value, but then overrides this and sets it to UTF-8. It does this
because the value of org.apache.http.protocol.HTTP.CHARSET_PARAM is "; charset=". That is,
it's failing because the response does not have a space between the charset parameter and
the previous parameter.
> Reading through the HTTP specs, I haven't come across anything that says either that
whitespace is permissible or not permissible here. In my view the code should therfore be
flexible enough to handle either case. 
> I would suggest simpifying the code to:
>      responseMsgCtx.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, charSetEnc);
> as the BuilderUtil.getCharSetEncoding() code above the offending code seems to be sufficient
at first glance.

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message