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

标签 java tomcat servlets nullpointerexception session-cookies

我有以下实用程序函数来从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。它并不总是抛出异常,但有时会抛出。这就是为什么弄清楚实际问题变得越来越困难。

我已经检查过与此相关的类似帖子,但这些都没有帮助。如有任何帮助,我们将不胜感激。

最佳答案

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

您的 Tomcat 版本相当旧,可能是时候更新一下了。如果不可能,请在调用 request.getCookies() 之前检查一下 request.getContext() == null。它可能仅在主机映射期间出现问题时才会发生,但如果没有更多信息,我无法告诉您确切的原因。通过一些额外的日志记录,您也许能够比较好请求和坏请求的详细信息,看看差异在哪里。

编辑:

升级到 tomcat 8.0.36 解决了该问题。

关于java - request.getCookies() 抛出 NullPointerException 尽管请求不为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38429980/

相关文章:

java - 如何在可嵌入对象上触发 EntityListener

java - 使用单个 for 循环对 JSONArray 进行排序

java - 访问Tomcat上的本地文件

java - servlet 和 jsp 显示相同的信息?

java - 如何在重定向之间保留模型属性?

tomcat - 自动部署 war 文件到 Jenkins 的错误

java - 如何从 Java 内部访问 jvmArgs?

java - 对象生命周期记录

java - OSGI 包和 Web 应用程序之间的通信

java - 在类声明中定义类型?