[ https://issues.apache.org/jira/browse/WW-4263?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13853850#comment-13853850 ]
Harry Chan commented on WW-4263: -------------------------------- I just found that the [*If-Modified-Since*|http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html] would follow the [*HTTP-date*|http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html] format: *rfc1123-date | rfc850-date | asctime-date*. However, the spec does not mention the *locale*. On the other hand, although I download the browsers in non-english language, the *If-Modified-Since* sent from those browser would still use *English* as the locale in the date format. So, I think we could use *English* as the default locale. e.g: *original* {code} private static final SimpleDateFormat IF_MODIFIED_SINCE_FORMAT = new SimpleDateFormat(IF_MODIFIED_SINCE_DATE_FORMAT); {code} *to* {code} private static final SimpleDateFormat IF_MODIFIED_SINCE_FORMAT = new SimpleDateFormat(IF_MODIFIED_SINCE_DATE_FORMAT, Locale.ENGLISH); {code} The pull request I created: https://github.com/apache/struts2/pull/11 > 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 > > > 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.4#6159)