2012-05-17 2 views
0

안녕하세요. 두통을 불러 일으키는 생산적인 webapp 개발 버전이 있습니다. admin.jsp가 폴더 구조를 표시하려고 시도하는 동안 로그인 할 때 다음 오류가 발생합니다. java tomcat : java.lang.NullPointerException

org.apache.jasper.JasperException: Exception in JSP: /admin/admin.jsp:133 

130: GenDisplay display = null; 
131: if(null==oldDisplay || true==oldDisplay.checkIsOld()) { 
132:  display = new GenDisplay(oldDisplay); 
133:  display.genTree(((CompanySession)ppa).getRootOrdner(), ((CompanySession)ppa).getRootType(), user.getUID(), out); 
134:  ((CompanySession)ppa).setGenDisplay(display); 
135: } else { 
136:  display = oldDisplay; 


Stacktrace: 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 

root cause 

java.lang.NullPointerException 
    ppa.admin.GenDisplay.getKey(GenDisplay.java:185) 
    ppa.admin.GenDisplay.isOpen(GenDisplay.java:161) 
    ppa.admin.GenDisplay.genSubTree(GenDisplay.java:49) 
    ppa.admin.GenDisplay.genSubTree(GenDisplay.java:57) 
    ppa.admin.GenDisplay.genSubTree(GenDisplay.java:57) 
    ppa.admin.GenDisplay.genSubTree(GenDisplay.java:57) 
    ppa.admin.GenDisplay.genTree(GenDisplay.java:42) 
    org.apache.jsp.admin.admin_jsp._jspService(admin_jsp.java:606) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 

오류 생성 라인 (606) 코드 블록 주위에 admin_jsp.java입니다 : 그건,
GenDisplay oldDisplay = ((CompanySession)ppa).getGenDisplay(); 
    GenDisplay display = null; 
    if(null==oldDisplay || true==oldDisplay.checkIsOld()) { 
     display = new GenDisplay(oldDisplay); 
     display.genTree(((CompanySession)ppa).getRootOrdner(), ((CompanySession)ppa).getRootType(), user.getUID(), out); 
     ((CompanySession)ppa).setGenDisplay(display); 
    } else { 
     display = oldDisplay; 
    } 
    //out.println(((CompanySession)ppa).getRootOrdner()); 
    // 
    int currentOrdner = ((CompanySession)ppa).getRootOrdner(); 
    int currentOrdnerType = ((CompanySession)ppa).getRootType(); 
    if(null!=oldDisplay) { 
    currentOrdner = oldDisplay.getCurrentOrdner(); 
    currentOrdnerType = oldDisplay.getCurrentOrdnerType(); 
    } else { 
     display.openOrdner(((CompanySession)ppa).getRootOrdner(), ((CompanySession)ppa).getRootType()); 
} 

그래서 내가 display.genTree (에 전달 된 변수) 널 중 하나 분류를 왜 NullPointerException이 . 이 개발은 작업중인 프로덕션 버전에서 정확히 복사되었으므로 여기서는 오류가 발생하고 프로덕션 버전에서는 오류가 발생하지 않는 이유는 무엇입니까? 나는 당혹 스럽다. 아무도 아이디어가 있습니까? 미리 감사드립니다!

p.s는 : 나는 자바 버전, 바람둥이 버전, 컴파일러 버전을 비교했다. 두 톰캣 모두 동일한 설정을 복원했습니다. 나는 mysql 서버 버전과 설정을 비교했다. 거의 동일한 버전과 설정입니다. 관련된 소프트웨어와의 주요 릴리스 차이가 없습니다. 나는 바람둥이 (6,7)의 최신 버전을 시도하고 다른 오류가있어, 그래서 더 혼란스러워. 나는 webapp을 작성하지 않았고 java를 처음 사용하기 때문에 정말 도움이 필요하다.

+0

우리는 null이 무엇인지, 코드가 실제로 무엇을하고 있는지 전혀 알지 못합니다. –

+0

분명히 뭔가가 개발 서버와 프로덕션 서버간에 다릅니다. 그것은 우리가 어느 누구에게도 접근 할 수 없다는 점을 감안할 때 가능한 한 많은 이야기입니다. – mcfinnigan

+0

개발 및 제작을 위해 tomcat 버전이 동일합니까? –

답변

0

생성 된 서블릿 코드에 문제가 없습니다. NPE는 ppa.admin.GenDisplay.getKey(GenDisplay.java:185에서 발생합니다. 변수 (null)이 역 참조되기 때문에 185 행에서 어떤 일이 발생하는지 살펴보고 변수가 설정되어야하는 위치를 찾아야합니다. 이것을 추적하면 dev와 production의 차이점 (환경 변수 또는 파일 시스템 권한과 같은 것)이 표시됩니다.

관련 문제