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] [Commented] (WW-4263) DefaultHttpHeaders.compareIfModifiedSince() throws ParseException when the locale of the web browser is different to the server
Date Fri, 27 Dec 2013 12:28:51 GMT

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

Johno Crawford commented on WW-4263:
------------------------------------

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