Оказывается, что:
- Более поздние версии Джерси автоматически переподключаются при обрыве соединения
- Правильным поведением в SSE при переподключении является повторная отправка всех элементов (при условии конечной последовательности элементов)
Таким образом, может показаться, что, когда сервер заканчивает отправку элементов, ни ошибка, ни полные обратные вызовы не инициируются, а вместо этого восстанавливается соединение, которое, в свою очередь, пересылает все элементы.
Я смог получить то, что хотел, используя альтернативный шаблон из документации Джерси:
fun loadAll() {
val target = client.target(baseURL)
val input = target.request().get(EventInput::class.java)
while(!input.isClosed) {
val inboundSseEvent = input.read()
if(inboundSseEvent != null) {
val thing = inboundSseEvent.readData(Thing::class.java, MediaType.APPLICATION_JSON_TYPE)
process(thing)
}
}
}