[
https://issues.apache.org/jira/browse/WW-4263?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13858102#comment-13858102
]
Yasser Zamani edited comment on WW-4263 at 12/28/13 7:44 PM:
-------------------------------------------------------------
If instantiating these three formats locally (within method) does not have any
sensible performance side-effect, we simply can avoid using ThreadLocal usage.
[~johno], do you believe it'll be have sensible performance side-effects? if
not, your previous patch was more simple. make things simple ;)
Also we have another option like below:
{code}
public Date convertStringToDate(String dateString) throws ParseException {
Date result;
synchronized(df) {
result = df.parse(dateString);
}
return result;
}
{code}
If Struts uses {{SimpleDateFormat}} a lot with no thread-safe, we can
completely define a new safe version like \[1\] and replace all with it.
\[1\] [http://code.google.com/p/safe-simple-date-format/downloads/list]
was (Author: yasser.zamani):
If instantiating these three formats locally (within method) does not have any
performance side-effect, we simply can avoid using ThreadLocal usage. [~johno],
do you believe it'll be have performance side-effects? if not, your previous
patch was more simple. make things simple ;)
Also we have another option like below:
{code}
public Date convertStringToDate(String dateString) throws ParseException {
Date result;
synchronized(df) {
result = df.parse(dateString);
}
return result;
}
{code}
If Struts uses {{SimpleDateFormat}} a lot with no thread-safe, we can
completely define a new safe version like \[1\] and replace all with it.
\[1\] [http://code.google.com/p/safe-simple-date-format/downloads/list]
> DefaultHttpHeaders.compareIfModifiedSince() throws ParseException when the
> locale of the web browser is different to the server
> -------------------------------------------------------------------------------------------------------------------------------
>
> Key: WW-4263
> URL: https://issues.apache.org/jira/browse/WW-4263
> Project: Struts 2
> Issue Type: Bug
> Components: Plugin - REST
> Affects Versions: 2.3.15.3
> Reporter: Harry Chan
> Assignee: Lukasz Lenart
> Labels: restful
> Fix For: 2.3.17
>
> Attachments: WW-4263-final.patch
>
>
> I am using the RESTFul plugin and this exception is thrown when I visit the
> page enabled *Caching*.
> When I trigger an action from my web browser, it pass the *If-Modified-Since*
> attribute to server side and the locale of it date format is in *en* - *Wed,
> 18 Dec 2013 16:00:00 GMT*.
> Then, in the server side, the *DefaultHttpHeaders* uses the method
> *compareIfModifiedSince()* to check if it should return the cached data.
> However, I found that the *DefaultHttpHeaders.compareIfModifiedSince()* would
> use the *default locale* of the server for parsing the *If-Modified-Since*
> input which causes ParseException as the locale of the server is NOT same as
> the web browser I used.
> {code}
> 17:24:20.915 [qtp5416428-21] DEBUG
> o.a.struts2.rest.DefaultHttpHeaders.debug()
> [8139ea3e-f463-42fa-9642-ecc2b44b7a21][] - Got error parsing
> If-Modified-Since header value [Wed, 18 Dec 2013 16:00:00 GMT] as [EEE, dd
> MMM yyyy HH:mm:ss zzz]!
> java.text.ParseException: Unparseable date: "Wed, 18 Dec 2013 16:00:00 GMT"
> at java.text.DateFormat.parse(DateFormat.java:357) ~[na:1.7.0_09]
> at
> org.apache.struts2.rest.DefaultHttpHeaders.compareIfModifiedSince(DefaultHttpHeaders.java:165)
> [struts2-rest-plugin-2.3.15.3.jar:2.3.15.3]
> at
> org.apache.struts2.rest.DefaultHttpHeaders.apply(DefaultHttpHeaders.java:149)
> [struts2-rest-plugin-2.3.15.3.jar:2.3.15.3]
> at
> org.apache.struts2.rest.RestActionInvocation.processResult(RestActionInvocation.java:190)
> [struts2-rest-plugin-2.3.15.3.jar:2.3.15.3]
> at
> org.apache.struts2.rest.RestActionInvocation.invoke(RestActionInvocation.java:145)
> [struts2-rest-plugin-2.3.15.3.jar:2.3.15.3]
> at
> com.opensymphony.xwork2.DefaultActionProxy.execute(DefaultActionProxy.java:147)
> [xwork-core-2.3.15.3.jar:2.3.15.3]
> at
> org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563)
> [struts2-core-2.3.15.3.jar:2.3.15.3]
> ...
> {code}
--
This message was sent by Atlassian JIRA
(v6.1.5#6160)