Какой вред наносит java.lang.IllegalStateException: ответ уже принят - PullRequest
6 голосов
/ 06 января 2010

Я постоянно получаю сообщение об ошибке в журналах консоли weblogic 10.3

java.lang.IllegalStateException: Response already committed
at weblogic.servlet.internal.ServletResponseImpl.objectIfCommitted(ServletResponseImpl.java:
1462)
at weblogic.servlet.internal.ServletResponseImpl.sendError(ServletResponseImpl.java:601)
at org.apache.struts.action.RequestProcessor.processMapping(RequestProcessor.java:658)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:193)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)

Усеченный. см. файл журнала для полной трассировки стека

Мне было интересно, какой вред это может причинить, если оставить незафиксированным? Эта ошибка была в моем приложении до того, как я присоединился к команде, достаточно ли это серьезно, чтобы квалифицироваться как «Требуется немедленное исправление»?

Ответы [ 3 ]

10 голосов
/ 06 января 2010

Struts с открытым исходным кодом. Просто проверьте источник RequestProcessor до строки 658 (как отмечено в stacktrace):

// No mapping can be found to process this request
String msg = getInternal().getMessage("processInvalid", path);
log.error(msg);
response.sendError(HttpServletResponse.SC_NOT_FOUND, msg);

См. Комментарий: No mapping can be found to process this request. Это коренная причина проблемы. Но вызов sendError() для отображения сообщения об ошибке также не может быть завершен, поскольку ответ уже зафиксирован. По-видимому, есть две причины сбоя: отсутствует сопоставление, и заданная по умолчанию работа сопоставления Struts была принята программным путем некорректно.

0 голосов
/ 06 января 2010

Зависит от того, что смысл ошибки в том, что вы записали свой объект HttpResponse и начали отправлять ответ (вызывая flush (), sendError () или sendRedirect ()), поэтому потенциально любые дополнения к потоку ответов ( или заголовки и т. д.) или действительно последующее действие (например, вы вызвали flush () и теперь вы вызываете sendError ()), запрошенное будет потеряно.

0 голосов
/ 06 января 2010

Это означает, что приложение попыталось отправить заголовок HTTP после отправки ответа. Какой вред это нанесет, зависит от приложения.

Большую часть времени браузер может допустить отсутствие HTTP-заголовка, но, например, если вы хотите указать специальный Content-Type, это может стать проблемой.

Тем не менее, я предлагаю вам найти основную причину проблемы, чтобы избежать путаницы или «странных» результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...