我在生产系统上运行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值?
答案 0 :(得分:6)
这看起来很像Struts中的错误。这个NPE是ServletConfig
不存在的典型情况,这意味着有问题的servlet没有正确覆盖init(ServletConfig config)
方法。根据链接的javadoc,实现者必须在那里明确地调用super.init(config)
。如果你不这样做,你就会得到这种NPE。
尝试升级Struts。
答案 1 :(得分:0)
InitializingRequestProcessor是你自己的类吗?
正在扩展RequestProcessor吗?您是否有可能重写一个方法(类似于init)而不是在其中调用super.init?
从我所看到的,看起来ActionServlet没有设置ServletContext。如果你的一个类扩展了Struts框架的一个类,就会发生这种情况。确保在从Struts Framework重写的方法中调用super.methodName,例如ActionServlet或RequestProcessor ...
祝你好运,让我们知道它是怎么回事