javax.servlet.GenericServlet.getServletContext(GenericServlet.java:205)的NullPointerException

问题描述 投票:0回答:2

我在生产系统上运行 Weblogic 8.1 SP6 服务器(JDK 1.4.2)。在服务器宕机之前,我们有时会在生产服务器上收到以下异常。我完全不知道如何解决这个问题。

 java.lang.NullPointerException
at javax.servlet.GenericServlet.getServletContext(GenericServlet.java:205)
at com.sampleapp.arch.struts.InitializingRequestProcessor.getProcessorForModule(InitializingRequestProcessor.java:135)
at com.sampleapp.arch.struts.InitializingRequestProcessor.initializeFormBean(InitializingRequestProcessor.java:29)
at com.sampleapp.arch.struts.ResettingDynaValidatorForm.reset(ResettingDynaValidatorForm.java:46)
at org.apache.struts.taglib.html.FormTag.initFormBean(FormTag.java:484)
at org.apache.struts.taglib.html.FormTag.doStartTag(FormTag.java:457)
at org.apache.strutsel.taglib.html.ELFormTag.doStartTag(ELFormTag.java:267)
at jsp_servlet._util.__settingsdisplay_f._jspService(__settingsdisplay_f.java:355)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)

InitializingRequestProcessor 的代码片段如下所示,并且在 return 语句中抛出 NullPointerException。

如果您需要任何其他信息,请询问。预先感谢。

    private static RequestProcessor getProcessorForModule(ActionServlet servlet, ModuleConfig config) {
    String key = Globals.REQUEST_PROCESSOR_KEY + config.getPrefix();
    return (RequestProcessor) servlet.getServletContext().getAttribute(key);
}

更新
根据 Alex 的回复,事实证明 ResettingDynaValidatorForm(DynaValidatorForm 的自定义实现)正在从 struts 的 ActionForm 类获取超级 ActionServlet,该类返回 NULL 值。
是否有原因导致服务器在运行几天后才开始为 ActionServlet 返回 NULL 值?

struts-1
2个回答
6
投票

这看起来很像 Struts 中的错误。此 NPE 是典型的

ServletConfig
不存在的情况,这意味着相关 servlet 没有正确覆盖
init(ServletConfig config)
方法。根据链接的 javadoc,实现者必须在其中显式调用
super.init(config)
。如果你不这样做,你就会得到这种 NPE。

尝试升级 Struts。


0
投票

InitializingRequestProcessor 是你自己的类吗?

是否正在扩展RequestProcessor?您是否有可能重写一个方法(例如 init 之类的方法)而不在其中调用 super.init ?

据我所知,ActionServlet 似乎没有设置 ServletContext。如果您的类之一扩展了 Struts 框架的类之一,则可能会发生这种情况。确保在从 Struts Framework 重写的方法(例如 ActionServlet 或 RequestProcessor)中调用 super.methodName...

祝你好运,让我们知道进展如何

© www.soinside.com 2019 - 2024. All rights reserved.