struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Johno Crawford (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (WW-4263) DefaultHttpHeaders.compareIfModifiedSince() throws ParseException when the locale of the web browser is different to the server
Date Fri, 27 Dec 2013 13:21:50 GMT

    [ https://issues.apache.org/jira/browse/WW-4263?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13857462#comment-13857462
] 

Johno Crawford edited comment on WW-4263 at 12/27/13 1:21 PM:
--------------------------------------------------------------

private static final SimpleDateFormat IF_MODIFIED_SINCE_FORMAT = new SimpleDateFormat(IF_MODIFIED_SINCE_DATE_FORMAT);

Does not matter if it is readonly. Since it is static, it will be shared between all threads
in the JVM, SimpleDateFormat stores intermediate results in instance fields. If one instance
is used by two threads they can mess the results.


was (Author: johno):
private static final SimpleDateFormat IF_MODIFIED_SINCE_FORMAT = new SimpleDateFormat(IF_MODIFIED_SINCE_DATE_FORMAT);

Since it is static, it will be shared between all threads in the JVM, SimpleDateFormat stores
intermediate results in instance fields. If one instance is used by two threads they can mess
the results.

> 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
>              Labels: restful
>             Fix For: 2.3.17
>
>         Attachments: WW-4263.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)

Mime
View raw message