Почему метод handle() Apache Tailer всегда закрывает HttpServletResponse?Apache

Ответить
Anonymous
 Почему метод handle() Apache Tailer всегда закрывает HttpServletResponse?

Сообщение 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]


Подробнее здесь: https://stackoverflow.com/questions/791 ... etresponse
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Apache»