2011-03-03 2 views
1

프로덕션 시스템에서 Weblogic 8.1 SP6 서버 (JDK 1.4.2)를 실행 중입니다. 이제 프로덕션 서버에서 다음 예외가 발생합니다. 서버가 다운되기 전에. 나는이 문제에 어떻게 접근해야하는지 전혀 모른다.javax.servlet.GenericServlet.getServletContext (GenericServlet.java:205)에 대한 NullPointerException

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이는 return 문에 발생합니다.

다른 정보가 필요한지 물어보십시오. 미리 감사드립니다.

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

업데이트
이 ResettingDynaValidatorForm (DynaValidatorForm의 사용자 정의 구현)은 NULL 값을 반환 스트럿의 ActionForm 클래스에서 슈퍼 ActionServlet이 점점 밝혀 알렉스의 응답을 바탕으로.
서버가 며칠 동안 실행 한 후에 만 ​​ActionServlet의 NULL 값을 반환하기 시작하는 이유가 있습니까 ??

답변

3

이 많은 스트럿츠에서이 문제를 같이가는 방법을 알려 주시기 ... 당신은 ActionServlet이 또는 RequestProcessor를 같은 스트럿츠 프레임 워크에서 무시 방법에 super.methodName를 호출해야합니다. 이 NPE는 일반적으로 ServletConfig이 없기 때문에 문제의 서블릿이 init(ServletConfig config) 메소드를 제대로 무시하지 못했음을 의미합니다. 링크 된 javadoc에 따라 구현자는 명시 적으로 super.init(config)을 호출해야합니다. 이렇게하지 않으면 이런 종류의 NPE를 얻을 수 있습니다.

Struts를 업그레이드하십시오.

0

InitializingRequestProcessor가 자신의 클래스입니까?

RequestProcessor가 확장 중입니까? init()과 같은 메소드를 오버라이드 (override)하고 super.init를 호출하지 않을 가능성이 있습니까?

내가 볼 수 있듯이, ActionServlet이 ServletContext로 설정되지 않은 것처럼 보입니다. 클래스 중 하나가 Struts 프레임 워크 클래스 중 하나를 확장하면 발생할 수 있습니다.

행운을 빌어 요, 우리가

+0

안녕 Alex, InitializingRequestProcessor.initializeFormBean은 org.apache.struts.validator.DynaValidatorForm 클래스를 확장하는 ResettingDynaValidatorForm에서 호출됩니다. getServlet()은 슈퍼 클래스에서 호출됩니다. –