2016-07-26 18 views
0

Java 7, JSP, Frühling 3, Apache-Tomcat 7.0.63. Netbeans.Ausnahme meldet null, kann nicht herausfinden, wie

Ich habe Änderungen an einer vorhandenen JSP-Datei vorgenommen und das Hintergrundformularobjekt geändert. Ich ging durch die JSP, um sicherzustellen, dass alle Verweise durch ein Feld mit dem richtigen Namen im Backing-Formularobjekt gesichert wurden.

In der Steuerung habe ich eine private saveEditedOrNewItem(); Es ruft eine Methode zum Initialisieren von Variablen im Modell für die Seite auf - setCommonModelAttributesForEdit(). Das Programm bombardiert, wenn das Erste das Letztere anruft und eine NullPointerException auslöst, aber ich mache nichts der Dereferenzierung, ich mache innerhalb des Anrufs keine Anrufe, um Parameter oder irgendetwas zu bekommen. Einer der Parameter ist null, aber das würde NPE nicht selbst verursachen.

Ich habe einen Haltepunkt auf der ersten ausführbaren Zeile von setCommonModelAttributesForEdit(); Dieser Haltepunkt wird nicht erreicht, wenn der Fehler ausgelöst wird (obwohl er bei einem vorherigen Aufruf ausgeführt wird und ohne Fehler ausgeführt wird, sodass die Methode ausführbar ist).

Hier ist der Code, der den Fehler auslöst:

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; 

Und hier ist der Fehler 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 'abgeflacht' alle zu setCommonModelAttributesForEdit() gebenen Parameter; Ich habe einen Haltepunkt beim Aufruf und kann alle übergebenen Werte überprüfen. Ich habe sogar sichergestellt, dass ich nicht innerhalb des Methodenaufrufs casten müsste. Die logoAttachmentId ist null, der Rest hat Nicht-Null-Werte. Um dies zu wiederholen, wird ein Haltepunkt, der am Anfang von setCommonModelAttributesForEdit() gesetzt ist, bei diesem Aufruf nicht getroffen, obwohl er bei einem früheren Aufruf getroffen wurde.

Wenn ich für den Aufruf "statt" in Schritt "über" gehe, komme ich in einen InvocationTargetException-Konstruktor mit einem Ziel von NullPointerException; der Aufruf-Stack zeigt (eventuell) an, dass ich mich in einem Anruf von SessionTimeoutCookieFilter.doFilter(); Die Klasse ist eine Erweiterung von GenericFilterBean und die Zeile, in der sie fehlschlägt, ist filterChain.doFilter(request, response);

So ist es nicht Ihre Mütter NullPointerException. Ich dereferenziere nichts in meinem Code, und es stoppt, wenn ich versuche, eine private Methode innerhalb einer Klasse aufzurufen, in der ich bereits ausführe, sodass das Objekt, auf das die Methode referenziert wird, bereits instanziiert ist. Keine davon sind statische Methoden. Ich habe "clean and compile" mehrfach gemacht, NetBeans neu gestartet, Windows neu gestartet, den Cache meines Browsers bereinigt.

Kann jemand vorschlagen, was ich sonst tun könnte, um dieses Problem zu finden?


Edit: Ich glaube nicht, dass dies als ein Duplikat der Frage qualifiziert, für die es als Duplikat geschlossen wurde. Nur weil eine Frage einen Nullzeiger beinhaltet, bedeutet das nicht, dass es sich um ein Duplikat der Big "Null Pointer" -Frage handelt.

Die Ursache dieser NPE (Autobox-Konvertierung) wurde einmal in ihrem vermeintlichen Duplikat erwähnt, in einem Kommentar und in einem anderen Kontext als in dieser Frage. Die aktuelle Frage wurde durch Autoboxing als Teil der Parameterübergabe an einen Methodenaufruf beantwortet. Die einzige Erwähnung in der großen Frage war in einer Auftragserklärung. Ich hätte es in kürzerer Zeit herausfinden müssen, als es mich gekostet hat, aber es hat viele andere Leute übertölpelt, einschließlich aller, die es auf SO gelesen haben. (Es wurde nur als Duplikat markiert, nachdem es beantwortet wurde.)

Ich schaute durch die Big Null Pointer Frage, bevor ich das gepostet habe, und die Antwort auf meine Frage ist nicht da.

+0

Was gibt es in Zeile 474? MyFormController.java:474 –

+0

Es ist der Aufruf zu SetCommonModelAttributesForEdit; Danke, dass du darauf hingewiesen hast, dass ich nicht gesagt habe, dass ich jetzt das Original bearbeitet habe, um anzuzeigen, wo es ist. – arcy

+0

Es gibt keine Magie: Es gibt keine Möglichkeit, dass Zeile 474 ist, wo Sie denken, dass es ist, der kompilierte Code und die Quelle in Ihrer IDE sind irgendwie nicht synchron. Mein erster Instinkt wäre, einen Debugger zu starten und den Zustand nach jeder Zeile zu beobachten, um zu überprüfen, was vor sich geht. – kryger

Antwort

0

Konnte es möglich sein, dass 1.) Ihre Sitzung abläuft, während Sie debuggen? 2.) Ihr Controller wird zweimal aufgerufen (vielleicht öfter) und das erste Mal, dass die erwarteten Werte vorhanden sind, während sie in nachfolgenden Aufrufen nicht vorhanden sind?

0

Es stellt sich heraus, dass der letzte Parameter setCommonModelAttributesForEdit() als int deklariert ist, und der übergebene Wert ist eine Null. Es funktionierte die vorherige Zeit, als die Ganzzahl, die für diesen Parameter übergeben wurde, einen Wert hatte, aber Autoboxing (offensichtlich) fehlschlägt mit einer NullPointerException, wenn eine Null übergeben wird.