Java 7,JSP,Spring 3,Apache-Tomcat 7.0.63。 Netbeans的。
我对现有的JSP文件进行了更改,并更改了支持表单对象。我浏览了JSP,以确保所有引用都由支持表单对象中正确名称的字段支持。
在控制器中,我有一个私人saveEditedOrNewItem()
;它调用一个方法来初始化页面模型中的变量 - setCommonModelAttributesForEdit()
。当前者调用后者时,该程序会发生爆炸,抛出NullPointerException,但我没有取消引用任何内容,我在调用中没有调用任何参数或任何东西。其中一个参数为null,但这本身不会导致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;
这是错误堆栈跟踪:
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)
我被压扁了'传递给setCommonModelAttributesForEdit()
的所有参数;我在调用时有一个断点,可以检查传入的所有值。我甚至确保我不必在方法调用中进行转换。 logoAttachmentId
为空,其余为非空值。要重复一次,在setCommonModelAttributesForEdit()
开头设置的断点不会在此调用中被命中,尽管它在早期调用时被命中。
如果我这样做,那就进入"而不是"跨越"对于调用,我最终在InvocationTargetException构造函数中,目标为NullPointerException;调用堆栈指示(最终)我正在来自SessionTimeoutCookieFilter.doFilter()
的呼叫;该类是GenericFilterBean的扩展,它失败的行是filterChain.doFilter(request, response);
所以这不是你母亲的NullPointerException。我没有在我的代码中取消引用任何内容,并且当我尝试在已经执行的类中调用私有方法时它停止,因此正在引用该方法的对象已经被实例化。这些都不是静态方法。我已经完成了#34;清理和编译"多次,我重新启动了NetBeans,我重新启动了Windows,我已经清理了浏览器的缓存。
有谁能建议我可以做些什么才能找到这个问题?
编辑:我认为这不符合作为副本关闭的问题的副本。仅仅因为一个问题涉及空指针并不意味着它是Big" Null Pointer"的复制品。问题
这个NPE(autobox转换)的原因在其假设的重复,评论和与此问题中出现的不同的上下文中被提及过一次。结果当前问题通过自动装箱作为参数传递给方法调用的一部分来回答;在大问题中唯一提到它的是一份任务说明。我应该在比我花费的时间更短的时间内弄清楚它,但它让很多其他人感到难过,包括所有在SO上阅读它的人。 (它只有在被回答后才被标记为重复。)
在我发布之前,我查看了Big Null指针问题,我的问题的答案不存在。
答案 0 :(得分:0)
有可能吗? 1.)您的会话在调试期间到期了? 2.)您的控制器被调用两次(可能更多次),并且第一次期望值在那里,而它们在后续调用中不存在?
答案 1 :(得分:0)
事实证明,setCommonModelAttributesForEdit()
的最后一个参数声明为int
,传入的值为null。前一次传入此参数的Integer有一个值,但是当传入null时,autoboxing(显然)会因NullPointerException而失败。