request.getCookies()抛出NullPointerException,尽管请求不为null

时间:2016-07-18 06:34:43

标签: java tomcat servlets nullpointerexception session-cookies

我使用以下utility函数从cookie获取价值:

public static long getClientTimezoneOffset(HttpServletRequest request) 
{
        long timeZoneOffset = 0;
        if(request != null)
        {
            Cookie[] cookies = request.getCookies(); // throws null pointer exeception from here

            if(cookies != null) 
            {
                for(Cookie cookie : cookies) 
                {
                    if(cookie.getName().equals("timezoneOffset")) 
                    {
                        try 
                        {
                            timeZoneOffset = Long.parseLong(cookie.getValue());
                        } 
                        catch (Exception ex) 
                        {
                            ex.printStackTrace();
                        }
                        break;
                    }
                }
            }

        }

        return timeZoneOffset;
}
java.lang.NullPointerException
  at org.apache.catalina.connector.Request.parseCookies(Request.java:2943)
  at org.apache.catalina.connector.Request.convertCookies(Request.java:2958)
  at org.apache.catalina.connector.Request.getCookies(Request.java:1987)
  at org.apache.catalina.connector.RequestFacade.getCookies(RequestFacade.java:662)
  at javax.servlet.http.HttpServletRequestWrapper.getCookies(HttpServletRequestWrapper.java:69)
  at javax.servlet.http.HttpServletRequestWrapper.getCookies(HttpServletRequestWrapper.java:69)
  at javax.servlet.http.HttpServletRequestWrapper.getCookies(HttpServletRequestWrapper.java:69)
  at javax.servlet.http.HttpServletRequestWrapper.getCookies(HttpServletRequestWrapper.java:69)

我已检查过request个对象,但它不是NULL。它并不总是抛出异常,但有时候。这就是为什么难以弄清楚实际问题的原因。

我已经检查过类似的相关帖子,但这些都没有帮助。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

在8.029版本中看起来已修复此问题。请参阅此错误:https://bz.apache.org/bugzilla/show_bug.cgi?id=58578

您的Tomcat版本已经很老了,无论如何都可能需要更新。如果无法做到这一点,请在致电request.getContext() == null之前查看是否检查request.getCookies()。它可能只会在主机映射期间出现问题时发生,但如果没有更多信息,我无法告诉您确切的原因。通过一些额外的日志记录,您可以将好的请求的详细信息与坏的请求进行比较,并查看差异的位置。

编辑:

升级到 tomcat 8.0.36 解决了这个问题。