2016-07-26 8 views
0

Java 7、JSP、Spring 3、Apache-Tomcat 7.0.63。ネットビーンズ。例外レポートがヌルであることがわかりません

私は既存のJSPファイルに変更を加え、バッキングフォームオブジェクトを変更しました。私は、すべての参照がバッキングフォームオブジェクトの正しい名前のフィールドに裏付けされていることを確認するためにJSPを調べました。

コントローラーでは、私にはプライベートsaveEditedOrNewItem()があります。モデルの変数をページのsetCommonModelAttributesForEdit()に初期化するメソッドを呼び出します。プログラムは、前者が後者を呼び出してNullPointerExceptionをスローすると爆弾を爆発させますが、私は何か逆参照しているわけではありません。パラメータの1つは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はnull、残りはnull以外の値を持ちます。繰り返すために、setCommonModelAttributesForEdit()の開始時に設定されたブレークポイントは、この呼び出しでヒットしませんが、以前の呼び出しでヒットします。

呼び出しのために "ステップオーバー"ではなく "ステップイン"すると、ターゲットはNullPointerExceptionのInvocationTargetExceptionコンストラクタになります。呼び出しスタックは、私がSessionTimeoutCookieFilter.doFilter()からの呼び出し中であることを示します(最終的に)。クラスはGenericFilterBeanの拡張であり、失敗している行はfilterChain.doFilter(request, response);

です。これは母親のNullPointerExceptionではありません。私は自分のコードで何か参照を外しているわけではなく、私がすでに実行しているクラスの中でプライベートメソッドを呼び出そうとすると、メソッドが参照されているオブジェクトが既にインスタンス化されているので停止します。どちらも静的メソッドではありません。私は「クリーンでコンパイル」を複数回やり、NetBeansを再起動しました.Windowsを再起動して、ブラウザのキャッシュを消去しました。

この問題を見つけるために他に何ができるのでしょうか?


編集:これは複製としてクローズされている質問の複製とはみなされません。質問にnullポインタが含まれているということだけが、それがBig "Null Pointer"質問の複製であることを意味するわけではありません。

このNPE(autobox変換)の原因は、その重複した箇所、コメント、およびこの質問とは異なる文脈で一度言及されました。現在の問題は、メソッドコールに渡すパラメータの一部としてオートボクシングによって答えられることが判明しました。ビッグ・クエスチョンのそれの唯一の言及は代入文であった。私はそれが私を取ったよりも短い時間でそれを理解していたはずですが、それを読んだ人を含め、他の多くの人々を困らせました。 (それは答えられた後にのみ重複としてマークされています。)

私はこれを投稿する前にBig Null Pointer Questionを調べました。私の質問に対する答えはそこにありません。

+0

行番号474には何がありますか? MyFormController.java:474 –

+0

これはsetCommonModelAttributesForEditの呼び出しです。私が言わなかったことを指摘してくれてありがとう、私は今どこにあるのかを示すオリジナルを編集しました。 – arcy

+0

魔法はありません。ライン474はあなたが思うところです。コンパイルされたコードとあなたのIDEのソースは何とか同期していません。私の最初の本能は、デバッガを起動し、何が起こっているかを検証するために各行の後の状態を見ることです。 – kryger

答えて

0

1.デバッグ中にセッションの有効期限が切れていますか? 2.)コントローラーは2回呼び出され(おそらくそれ以上)、後続の呼び出しには存在しない間に期待値が最初に表示されますか?

0

setCommonModelAttributesForEdit()の最後のパラメータはintと宣言され、渡される値はnullです。これは前回、このパラメータに渡されたIntegerが値を持っていたときに機能しましたが、nullが渡されたときにオートボクシング(明らかに)がNullPointerExceptionで失敗します。