[ 
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)

Reply via email to