java.lang.stackoverflowerror в приложении jsf с tomcat - PullRequest
0 голосов
/ 17 августа 2011

Привет, я пытаюсь выяснить ошибку переполнения стека.

Все, что я знаю, это ошибка от

org.apache.catalina.core.ApplicationDispatcher.setAttribute on line 278

Но я понятия не имею, что вызвало это.

Как лучше всего отследить ошибку? Это похоже на поиск иголки в стоге сена, так как существует более 50 классов.

Как узнать, какой метод вызывает это, чтобы получить ошибку? (например, какой метод я хочу включить режим отладки, чтобы отследить этот стекопоток).

Ответы [ 4 ]

2 голосов
/ 17 августа 2011

Трудно найти истинную причину, не видя следа стека и интерпретируя / понимая повторяющиеся паттерны.

Однако наиболее распространенными ошибками новичка, которые могут вызвать StackOverflowError в веб-приложении JSF, являются:

  • Недопустимое отображение FacesServlet. Например. отображается на *.jsp, в то время как представления сами по себе уже *.jsp. Вы должны отобразить это на другом *.jsf. В этом нет необходимости, если вы используете JSF2 с Facelets. Оба вида и отображение могут быть *.xhtml.

  • Файл представления JSF с недопустимым расширением файла. Например. на самом деле имеет файл page.jsf вместо page.jsp или page.xhtml, в то время как FacesServlet отображается на *.jsf.

Смею поспорить, что ваша причина вызвана одной из этих причин. Другие возможные причины, как правило, сводятся к собственному плохому коду в базовых классах bean-компонентов, но обычно это не связано с внутренними классами контейнера, такими как org.apache.catalina.core.ApplicationDispatcher, в повторяющейся части трассировки.

1 голос
/ 17 августа 2011

лучший способ отследить ошибку - посмотреть трассировку стека, вероятно, что-то происходит рекурсивно, ваша трассировка, вероятно, будет иметь повторяющиеся последовательности вызовов методов.

0 голосов
/ 03 октября 2012

У меня была эта проблема, и для меня это, казалось, было ошибкой - создание пустого лицаface-config.xml заставило ее исчезнуть (был обходной путь).CDI также был настроен / установлен.

0 голосов
/ 17 августа 2011

В папке TOMCAT_HOME/logs/ (Tomcat 6 и 7) есть файл catalina.yyyy-mm-dd.log, который содержит все зарегистрированные сообщения (включая исключения, выданные приложением). Получите последний (сегодняшний) файл журнала и посмотрите, где было сгенерировано исключение (обычно самое последнее время, когда произошла ошибка).

...