2016-07-26 3 views
0

Java 7, JSP, Spring 3, Apache-Tomcat 7.0.63. Netbeans.Исключения отчетов null, не могут понять, как

Я внесла изменения в существующий JSP-файл и изменил объект формы. Я прошел через JSP, чтобы гарантировать, что все ссылки были поддержаны полем правильного имени в объекте формы поддержки.

В контроллере у меня есть частный saveEditedOrNewItem(); он вызывает метод инициализации переменных в модели для страницы - setCommonModelAttributesForEdit(). Программа бомбит, когда первый звонит последнему, бросая исключение NullPointerException, но я не разыскиваю что-либо, я не звоню в вызове, чтобы получить параметры или что-то еще. Один из параметров является нулевым, но это не вызовет NPE сам по себе.

У меня есть точка останова на первой исполняемой строке setCommonModelAttributesForEdit(); эта точка останова не достигается при запуске ошибки (хотя она выполняется при предыдущем вызове и выполняется до завершения без ошибок, поэтому этот метод является исполняемым).

Вот код, который бросает ошибку:

if (errors.hasErrors()) { 
     if (entityCode == null || entityCode.equals("")) { entityCode = "Select"; } 
     Integer entityId = prospectForm.getentityId(); 
     String prospectName = prospectForm.getName(); 
     Object leafNodeFlag = getLeafNodeFlag(request); 
     Boolean bLeafNodeFlag = (Boolean)leafNodeFlag; 
     boolean bbLeafNodeFlag = (boolean)bLeafNodeFlag; 
     Integer logoAttachmentId = prospectForm.getLogoAttachmentId(); 
     ModelMap localModelMap = model; 
     // the following is line 474 in the stacktrace 
     setCommonModelAttributesForEdit(localModelMap, entityCode, entityId, 
             prospectName, bbLeafNodeFlag, prospectForm, 
             logoAttachmentId); 
     return prospectEditView; 

И вот StackTrace ошибка:

java.lang.NullPointerException 
    at com.accesspointinc.crm.prospect.MyFormController.saveEditedOrNewProspect(MyFormController.java:474) 
    at com.accesspointinc.crm.prospect.MyFormController.saveNewProspect(MyFormController.java:434) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at com.accesspointinc.commons.filter.SessionTimeoutCookieFilter.doFilter(SessionTimeoutCookieFilter.java:40) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at com.accesspointinc.commons.filter.StatesFilter.doFilter(StatesFilter.java:34) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:322) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620) 
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2516) 
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2505) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:722) 

I 'сплющенные' все параметры, передаваемые setCommonModelAttributesForEdit(); У меня есть точка останова на вызове, и я могу проверить все передаваемые значения. Я даже гарантировал, что мне не нужно будет вводить вызов метода. Значение logoAttachmentId равно null, остальные значения имеют ненулевые значения. Повторяю, точка останова, установленная в начале setCommonModelAttributesForEdit(), не попадает на этот вызов, хотя она попадает на более ранний вызов.

Если я сделаю «шаг за шагом» вместо «перешагнуть» для вызова, я попаду в конструктор InvocationTargetException с целью исключения NullPointerException; стек вызовов указывает (в конечном итоге), что я нахожусь в вызове от SessionTimeoutCookieFilter.doFilter(); класс является расширением GenericFilterBean, а строка, в которой он сбой, - filterChain.doFilter(request, response);

Так что это не ваши матери NullPointerException. Я не разыскиваю что-либо в своем коде, и он останавливается, когда я пытаюсь вызвать частный метод в классе, в котором я уже выполняю, поэтому объект, для которого ссылается этот метод, уже создан. Ни один из них не является статическим. Я делал «очистить и скомпилировать» несколько раз, перезапустил NetBeans, перезагрузил Windows, я очистил кеш браузера.

Может кто-нибудь предложить, что еще я могу сделать, чтобы найти эту проблему?


Edit: я не думаю, что это квалифицируется как дубликат этого вопроса, для которых он был закрыт как дубликат. Просто потому, что вопрос включает нулевой указатель, это не значит, что это дубликат большого вопроса «Нулевой указатель».

Причина этого NPE (преобразование автобокса) упоминалась один раз в его предполагаемом дубликате, в комментарии и в другом контексте, чем в этом вопросе. На текущий вопрос ответили автобоксин как часть передачи параметров вызову метода; единственное упоминание об этом в Большом Вопросе было в заявлении о назначении. Я должен был понять это за меньшее время, чем это потребовалось, но это заглохло многих других людей, включая всех, кто читал это на SO. (Он был отмечен как дубликат после ответа.)

Я просмотрел Вопрос с большим нулевым указателем, прежде чем я разместил это, и ответа на мой вопрос нет.

+0

Что имеется на линии номер 474? MyFormController.java:474 –

+0

Это вызов setCommonModelAttributesForEdit; спасибо за указание, что я не сказал, теперь я отредактировал оригинал, чтобы указать, где он находится. – arcy

+0

Нет никакой магии: нет способа, чтобы линия 474 была там, где вы думаете, что скомпилированный код и источник в вашей среде IDE каким-то образом вышли из синхронизации. Моим первым инстинктом было бы запустить отладчик и посмотреть состояние после каждой строки, чтобы проверить, что происходит. – kryger

ответ

0

Возможно ли, что 1.) Срок действия вашей сессии истекает во время отладки? 2.) Контроллер вызывается дважды (возможно, больше раз) и первый раз, когда ожидаемые значения присутствуют, пока они не существуют в последующих вызовах?

0

Оказывается, что последний параметр setCommonModelAttributesForEdit() объявлен как int, а переданное значение равно null. Он работал в предыдущее время, когда Integer прошел для этого параметра, имел значение, но autoboxing (по-видимому) терпит неудачу с исключением NullPointerException при передаче нулевого значения.

Смежные вопросы