2009-06-03 13 views
8

Actualmente estoy usando Apache Tomcat 5.5.16 para servir una API de búsqueda basada en Lucene.¿Por qué mi stacklet de servlet muestra "Fuente desconocida" para mis clases?

Últimamente he tenido algunas NullPointerExceptions dentro de mi clase de servlet. La clase se llama com.my_company.search.servlet.SearchServlet.

Con ciertos tipos de entrada, puedo crear rutinariamente una NullPointerException, pero estoy teniendo problemas para averiguar exactamente dónde está.

El StackTrace indica que el error está ocurriendo aquí:

com.my_company.search.servlet.SearchServlet.doGet(Unknown Source)

La fuente y los archivos .class para esta clase es todo en:

$TOMCAT_HOME/webapps/my_servlet/WEB-INF/classes/com/my_company/search/servlet/

Mi pregunta es, ¿cómo ¿Puedo hacer que Tomcat me proporcione ubicaciones de error más descriptivas?

Respuesta

21

Tomcat no puede proporcionarle información más detallada a menos que las clases en cuestión se hayan compilado con información de depuración. Sin esta información de depuración, la JVM no puede determinar en qué línea de código se produjo el error.

Editar: Puede pedir al compilador que incluya esta información especificando el -goption cuando se ejecuta javac en la línea de comandos. También puede especificar esta opción usando el parámetro debug del Javac Ant task.

+0

+1, y si el uso de Eclipse para compilar similar fue discutido ayer http://stackoverflow.com/questions/939194/preserving-parameter-argument-names-in-compiled- java-classes – Pool

+0

+1, con el comentario adicional de que probablemente necesites pensar en refactorizar tu método doGet: si tus métodos son lo suficientemente pequeños y hacen bastante poco, bastaría con saber qué entrada era nula y en qué método sería probablemente suficiente. . (Pero compilar con la depuración activada es definitivamente la respuesta a su problema inmediato.) – Jared

+0

Gracias, esto fue de gran ayuda. Agregué debug = true a la sección javac del archivo de compilación y funcionó perfectamente. Y sí. No hay duda de que necesito refactorizar mi doGet =) – zorlack

0

la fuente desconocida de ubicación puede ocurrir cuando el compilador JIT ha optimizado su clase. En ese punto, la información de origen se pierde. para obtener la ubicación original, reinicie el servidor y vuelva a intentar su prueba. La mayoría de las veces obtendrá la ubicación en su fuente

4

tiene que agregar información de depuración a sus clases. compilar con la opción -g:

javac -g YourServlet.java 
Cuestiones relacionadas