После поиска многих статей я не смог найти причину закрытия HttpServletResponse. Я использую Apache Tailer для чтения файла журнала и отправки этих строк в виде потока в мой API для отдыха. Ниже приведены некоторые подробности моей реализации.
Rest API:
@GetMapping(value = "/tag/{id}/logevents", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public void getTagLogEvents(@PathVariable("id") String id, HttpServletResponse response) throws ApiException {
response.setContentType(MediaType.TEXT_EVENT_STREAM_VALUE);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Connection", "keep-alive");
tagService.streamLiveLogFile(tagId+".log", response);
}
Настраиваемый класс прослушивателя журнала тестирования Publisher.java. Я хотел записать эти строки в ответ в виде потока.
public class TestingLogPublisher extends TailerListenerAdapter {
HttpServletResponse response;
public TestingLogPublisher(HttpServletResponse response) {
this.response = response;
}
@Override
public void handle(String line) {
if (StringUtils.isNotBlank(line)) {
try {
response.getOutputStream().println(line);
response.getOutputStream().flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
На моем уровне обслуживания я создаю Tailer, как показано ниже.
Tailer.builder()
.setFile(myPath.toFile())
.setTailerListener(new TestingLogPublisher(response))
.setDelayDuration(Duration.ofMillis(100L))
.get();
Я получаю следующую ошибку. Может ли кто-нибудь подсказать, как записать строки журнала в HttpServletResponse?
org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to write: Closed
at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.handleIOException(StandardServletAsyncWebRequest.java:320) ~[spring-web-6.1.8.jar!/:6.1.8]
at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.write(StandardServletAsyncWebRequest.java:378) ~[spring-web-6.1.8.jar!/:6.1.8]
at jakarta.servlet.ServletOutputStream.print(ServletOutputStream.java:86) ~[jakarta.servlet-api-6.0.0.jar!/:6.0.0]
at jakarta.servlet.ServletOutputStream.println(ServletOutputStream.java:188) ~[jakarta.servlet-api-6.0.0.jar!/:6.0.0]
Подробнее здесь: https://stackoverflow.com/questions/791 ... etresponse
Почему метод handle() Apache Tailer всегда закрывает HttpServletResponse? ⇐ Apache
1730871307
Anonymous
После поиска многих статей я не смог найти причину закрытия HttpServletResponse. Я использую Apache Tailer для чтения файла журнала и отправки этих строк в виде потока в мой API для отдыха. Ниже приведены некоторые подробности моей реализации.
Rest API:
@GetMapping(value = "/tag/{id}/logevents", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public void getTagLogEvents(@PathVariable("id") String id, HttpServletResponse response) throws ApiException {
response.setContentType(MediaType.TEXT_EVENT_STREAM_VALUE);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Connection", "keep-alive");
tagService.streamLiveLogFile(tagId+".log", response);
}
Настраиваемый класс прослушивателя журнала тестирования Publisher.java. Я хотел записать эти строки в ответ в виде потока.
public class TestingLogPublisher extends TailerListenerAdapter {
HttpServletResponse response;
public TestingLogPublisher(HttpServletResponse response) {
this.response = response;
}
@Override
public void handle(String line) {
if (StringUtils.isNotBlank(line)) {
try {
response.getOutputStream().println(line);
response.getOutputStream().flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
На моем уровне обслуживания я создаю Tailer, как показано ниже.
Tailer.builder()
.setFile(myPath.toFile())
.setTailerListener(new TestingLogPublisher(response))
.setDelayDuration(Duration.ofMillis(100L))
.get();
Я получаю следующую ошибку. Может ли кто-нибудь подсказать, как записать строки журнала в HttpServletResponse?
org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to write: Closed
at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.handleIOException(StandardServletAsyncWebRequest.java:320) ~[spring-web-6.1.8.jar!/:6.1.8]
at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.write(StandardServletAsyncWebRequest.java:378) ~[spring-web-6.1.8.jar!/:6.1.8]
at jakarta.servlet.ServletOutputStream.print(ServletOutputStream.java:86) ~[jakarta.servlet-api-6.0.0.jar!/:6.0.0]
at jakarta.servlet.ServletOutputStream.println(ServletOutputStream.java:188) ~[jakarta.servlet-api-6.0.0.jar!/:6.0.0]
Подробнее здесь: [url]https://stackoverflow.com/questions/79160359/why-apache-tailer-handle-method-always-closing-the-httpservletresponse[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия