2014-05-08 51 views
0

我試圖爲HttpServletRequest與呼叫HTTP頭Date: Tue, 15 Nov 1994 08:12:31 GMT解析到request.getDateHeader("Date")但得到下面的異常時:異常解析RFC1123日期的HttpServletRequest#getDateHeader()

java.lang.NumberFormatException: Tue, 15 Nov 1994 08:12:31 GMT 
    at org.mortbay.io.BufferUtil.toLong(BufferUtil.java:106) 
    at org.mortbay.jetty.HttpFields$Field.getLongValue(HttpFields.java:1479) 
    at org.mortbay.jetty.HttpFields.getLongField(HttpFields.java:720) 
    at org.mortbay.jetty.Request.getIntHeader(Request.java:728) 
    at javax.servlet.http.HttpServletRequestWrapper.getIntHeader(HttpServletRequestWrapper.java:106) 
    at javax.servlet.http.HttpServletRequestWrapper.getIntHeader(HttpServletRequestWrapper.java:106) 
    at com.google.appengine.tools.development.ResponseRewriterFilter$RequestWrapper.getDateHeader(ResponseRewriterFilter.java:417) 
    at com.example.ExampleServlet.doPost(ExampleServlet.java:93) 

我在做什麼錯?樣本日期直接來自HTTP specification,所以我期望它在RFC 1123下有效。該servlet是App Engine應用程序(位於開發服務器上)的一部分。

+0

您是否修剪了堆棧跟蹤?它不包含對'getDateHeader'的引用或您可能編寫的任何代碼。你能編輯你的問題,包括你寫的代碼和更完整的堆棧跟蹤嗎? – Kenster

+0

@Kenster我從堆棧跟蹤中添加了幾行(並將我的實際類名稱模仿爲ExampleServlet)。如您所見,該servlet託管在Google App Engine上。如果需要,我還可以發佈完整跟蹤。 'doPost()'內的實際調用如下所示:'Date date = new Date(request.getDateHeader(「Date」))''。 – Drux

回答

1

This is a known bug在應用程序引擎庫中。 Here is the getDateHeader function有問題,並且它明確地稱爲super.getIntHeader()。不幸的是,Google似乎並不急於修復它。

+1

+1我目前的解決方法是在'DateFormat'上調用'Date date = rfc1123DateFormat.parse(request.getHeader(「Date」))''已經用'rfc1123DateFormat = new SimpleDateFormat(「EEE,dd MMM yyyy HH :mm:ss z「,Locale.US); rfc1123DateFormat.setTimeZone(TimeZone.getTimeZone( 「GMT」));'。 – Drux