サーブレットのスタックトレースにクラスの「不明なソース」が表示されるのはなぜですか?
-
09-09-2019 - |
質問
現在、Apache Tomcat 5.5.16 を使用して Lucene ベースの検索 API を提供しています。
最近、サーブレット クラス内で NullPointerExceptions が発生するようになりました。クラスは次のように呼ばれます com.my_company.search.servlet.SearchServlet
.
特定の種類の入力では、NullPointerException を日常的に作成できますが、それがどこにあるのかを正確に把握するのに苦労しています。
StackTrace は、バグがここで発生していることを示しています。
com.my_company.search.servlet.SearchServlet.doGet(Unknown Source)
このクラスのソース ファイルと .class ファイルはすべて次の場所にあります。
$TOMCAT_HOME/webapps/my_servlet/WEB-INF/classes/com/my_company/search/servlet/
私の質問は、Tomcat にもっとわかりやすいエラーの場所を提供させるにはどうすればよいでしょうか?
解決
Tomcat は、問題のクラスがデバッグ情報を使用してコンパイルされていない限り、より詳細な情報を提供できません。このデバッグ情報がないと、JVM はコードのどの行でエラーが発生したかを判断できません。
編集: を指定することで、コンパイラにこの情報を含めるよう依頼できます。 -g
オプション 走っているとき javac
コマンドラインで。このオプションは、 debug
のパラメータ Javac Antタスク.
他のヒント
あなたのクラスにデバッグ情報を追加する必要があります。オプション-g
でそれらをコンパイルします:
javac -g YourServlet.java
場所未知のソース缶が発生します。その時点で、ソース情報が失われます。元の場所を取得するには、サーバーを再起動し、テストを再試行してください。ほとんどの時間、あなたのソース内の位置を取得します。