NullPointerException для javax.servlet.GenericServlet.getServletContext (GenericServlet.java:205) - PullRequest
3 голосов
/ 03 марта 2011

Я использую сервер 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, а в операторе возврата выбрасывается исключение NullPointerException.

Пожалуйста, спросите, если вам нужнолюбая другая информация.Заранее спасибо.

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

Обновление
На основании ответа Алекса выясняется, что ResettingDynaValidatorForm (пользовательская реализация DynaValidatorForm) получает супер ActionServlet из класса ActionFormStruts, который возвращает значение NULL.
Существует ли причина, по которой сервер начнет возвращать значения NULL для ActionServlet только после нескольких дней работы ??

Ответы [ 2 ]

6 голосов
/ 03 марта 2011

Это похоже на ошибку в Struts. Этот NPE типичен для отсутствия ServletConfig, что означает, что рассматриваемый сервлет не переопределил метод init(ServletConfig config) должным образом. Согласно связанному javadoc, разработчик должен явно вызвать super.init(config) там. Если вы этого не сделаете, вы получите этот тип NPE.

Попробуйте обновить Struts.

0 голосов
/ 03 марта 2011

InitializingRequestProcessor - это ваш собственный класс?

Является ли расширение RequestProcessor?Возможно ли, что вы переопределяете метод (что-то вроде init) и не вызываете в нем super.init?

Из того, что я вижу, похоже, что ActionServlet не был установлен ServletContext.Это может произойти, если один из ваших классов расширяет один из классов инфраструктуры Struts.Убедитесь, что вы вызываете super.methodName в методах, которые вы переопределяете в Struts Framework, таких как ActionServlet или RequestProcessor ...

Удачи, сообщите нам, как это происходит

...