[
https://issues.apache.org/jira/browse/SYNAPSE-662?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12883516#action_12883516
]
Heshan Suriyaarachchi edited comment on SYNAPSE-662 at 6/29/10 7:52 AM:
------------------------------------------------------------------------
Hi,
I went through 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);
Attaching the patch herewith.
[1] - http://www.w3.org/Protocols/HTTP/1.0/spec.html#Content-Type
[2] - http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17
was (Author: heshan):
Hi,
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);
Attaching the patch herewith.
[1] - http://www.w3.org/Protocols/HTTP/1.0/spec.html#Content-Type
[2] - http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17
> ClientWorker overriding character encoding
> ------------------------------------------
>
> Key: SYNAPSE-662
> URL: https://issues.apache.org/jira/browse/SYNAPSE-662
> 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: [email protected]
For additional commands, e-mail: [email protected]