- - PR -
tomcat dom NullPointerExceptionについて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-25 16:38
xmlファイル検索機能をjspで作ろうと考えています。
全画面で検索語を受け取ってからの、jsp動作部分でerrorが起こり、どうもうまくいきません。 みなさんの助力をいただければと思い、投稿させていただきました。をどんな些細な事でもかまいません。よろしくお願いします。 error内容 The server encountered an internal error () that prevented it from fulfilling this request. 例外 org.apache.jasper.JasperException org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 原因 java.lang.NullPointerException org.apache.jsp.day04_002d4.p5_005faddSrch_jsp._jspService(org.apache.jsp.day04_002d4.p5_005faddSrch_jsp:69) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 注意 原因のすべてのスタックトレースは、Apache Tomcat/5.5.4のログに記録されています <%@ page contentType="text/html;charset=Windows-31J" import="javax.xml.parsers.*,org.w3c.dom.*" %> <% request.setCharacterEncoding("Windows-31J"); %> <html> <head> <title>試験名検索結果</title> </head> <body> <h1 style="background:#cccccc">試験名検索結果</h1> <% int num; boolean flag=false; String strmoon="",strday="",strtest="",strplace="",strtxt1="",strmail="",strpass="",strtxt2=""; //全画面からのユーザーの入力をstrKeyに String strKey=request.getParameter("name"); DocumentBuilderFactory objDbf=DocumentBuilderFactory.newInstance(); DocumentBuilder objDb=objDbf.newDocumentBuilder(); Document objDoc=objDb.parse( application.getRealPath("tom02-1/houkoku.xml")); Element objRoot=objDoc.getDocumentElement(); NodeList clnNod=objRoot.getChildNodes(); for(int i=0;i<clnNod.getLength();i++){ Node objNod=clnNod.item(i); NodeList clnNod2=objNod.getChildNodes(); Node objNod2=clnNod2.item(0); //検索語が見つかった場合にテキストノード取得。おそらくこのあたりでnulエラーが起 //こっているのではないかと考えています。 if(objNod2.getFirstChild().getNodeValue().equals(strKey)){ strmoon=clnNod2.item(1).getFirstChild().getNodeValue(); strday=clnNod2.item(2).getFirstChild().getNodeValue(); strtest=clnNod2.item(3).getFirstChild().getNodeValue(); strplace=clnNod2.item(4).getFirstChild().getNodeValue(); strtxt1=clnNod2.item(5).getFirstChild().getNodeValue(); strmail=clnNod2.item(6).getFirstChild().getNodeValue(); strpass=clnNod2.item(7).getFirstChild().getNodeValue(); strtxt2=clnNod2.item(.getFirstChild().getNodeValue(); flag=true; break; } } if(flag){ %> <table border="0"> <tr> <th style="color:#FFffFF;background:#0086b2; text-align:right;">試験名</th> <td><%=strKey %></td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2; text-align:right;">日時 月</th> <td><%=strmoon %></td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2; text-align:right;">日</th> <td><%=strday %></td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2; text-align:right;">内容</th> <td><%=strtest %></td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2; text-align:right;">場所</th> <td><%=strplace %></td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2; text-align:right;">概要</th> <td><%=strtxt1 %></td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2; text-align:right;">方法</th> <td><%=strmail %></td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2; text-align:right;">結果</th> <td><%=strpass %></td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2; text-align:right;">その他の感想</th> <td><%=strtxt2 %></td> </tr> </table> <% }else{ %> <div style="color:Red">指定された名前は見つかりません</div> <% } %> </body> </html> 至らない所が多い文書で、申し訳ありません。 [ メッセージ編集済み 編集者: ベルトコンベア 編集日時 2006-10-26 08:58 ] | ||||||||
|
投稿日時: 2006-10-25 16:47
tomcatのworkディレクトリの下にjspがコンパイルされたjavaファイルがあるから、それを見てみましょう。
| ||||||||
|
投稿日時: 2006-10-25 16:52
そう思うのであれば、まずどこで発生しているのか確認してください。JSPに直接コード が書かれているのでわかりにくいでしょうが、
この通りエラーの出ている場所は示されているので、mioさんが書かれている通り出力 されたJSPを開いて発生箇所を確認してください。 | ||||||||
|
投稿日時: 2006-10-26 00:31
お返事ありがとうございます。
調べてみた結果、以下の部分でした。 69行目、if(objNod2.getFirstChild().getNodeValue().equals(strKey)){ 中の変数の使い方の間違いなのかと思い、試してみたんですが、 駄目でした。その可能性が高いとは思ったんですが。 教えていただけないでしょうか。 どんな些細な情報でもいいので、よろしくお願いします。 | ||||||||
|
投稿日時: 2006-10-26 01:29
元のXMLがわからないので何とも言えませんが、 上記の場合、 ・objNod2がnull ・getFirstChild()の戻り値がnull ・getNodeValue()の戻り値がnull のいずれかです。 objNod2が前のステートメントで利用できていることを考えると、 objNod2がnullではないことは確かです。 XMLとメソッドの実行によって、どのようなケースでnullが返されるかを APIドキュメントを読んでみてください。 適切なnullに対する処理を行うべきでしょう。 ドットで繋げて記述するのもいいですが、 どこでnullが返されているか、わかりづらくなります。 最低限のデバッグ技術を身に付けてからにした方がいいと思います。 | ||||||||
|
投稿日時: 2006-10-26 10:50
おはようございます。
mioさん、ukさん、かつのりさん。お返事ありがとうございます。 ではドットを使わない記法であれば、69行目を Node objNod2=clnNod2.item(0); Node objNod3=objNod2.getFirstChild(); Node objNod4=objNod3.getNodValue(); if( objNod4.equals(strKey)){ のようにするという事でいいのでしょうか。 エラー内容が変わったので、それについて調べようと考えています。 エラー箇所 10行目の部分で、 <% エラー内容 The method getValue() is undefined for the type Node [ メッセージ編集済み 編集者: ベルトコンベア 編集日時 2006-10-26 11:57 ] | ||||||||
|
投稿日時: 2006-10-26 11:42
そのように一度、一時変数に格納することで 途中経過を確認しやすくなります。 その状態でステップ実行する(今回はJSPなのでやりにくいですが)とか、 間にSystem.out.println()を入れるとかするとデバッグしやすいですね。 地味で面倒なデバッグ手法ですが、 「急がば回れ」といいますか、効果は大きいですね。 # かなり最近におなじような話をしたような? | ||||||||
|
投稿日時: 2006-10-26 16:30
上記の訂正です。
エラー内容(訂正) The method item(int) is undefined for the type Node エラー箇所(先程と一緒です) 10行目 <% この内容について調べようと考えています。 [ メッセージ編集済み 編集者: ベルトコンベア 編集日時 2006-10-26 16:34 ] |