From e8d2c6c74be7aabbc74edadf02ac4453bc216a07 Mon Sep 17 00:00:00 2001 From: Violeta Georgieva Date: Tue, 2 May 2017 23:22:01 +0300 Subject: [PATCH] AbstractListenerWriteProcessor/AbstractListenerWriteFlushProcessor error handling When an exception happens while writing/flushing, the exception handling for Servlet 3.1 based implementation will happen when WriteListener#onError and AsyncListener#onError events are received --- .../AbstractListenerWriteFlushProcessor.java | 12 ++++++-- .../AbstractListenerWriteProcessor.java | 12 ++++++-- .../reactive/ServletServerHttpResponse.java | 28 +++++++++++-------- .../reactive/UndertowServerHttpResponse.java | 12 ++++++++ 4 files changed, 49 insertions(+), 15 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteFlushProcessor.java b/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteFlushProcessor.java index 00de5e141e3..8970bd2ddd2 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteFlushProcessor.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteFlushProcessor.java @@ -103,6 +103,14 @@ public abstract class AbstractListenerWriteFlushProcessor implements Processo } } + /** + * Invoked when an error happens while flushing. Defaults to no-op. + * Servlet 3.1 based implementations will receive + * {@link AsyncListener#onError(Throwable)} event. + */ + protected void flushingFailed(Throwable t) { + } + /** * Create a new processor for subscribing to the next flush boundary. @@ -167,8 +175,8 @@ public abstract class AbstractListenerWriteFlushProcessor implements Processo processor.flush(); } catch (IOException ex) { - processor.cancel(); - processor.onError(ex); + processor.flushingFailed(ex); + return; } if (processor.subscriberCompleted) { if (processor.changeState(this, COMPLETED)) { diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteProcessor.java b/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteProcessor.java index d682672a31a..21cbe604823 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteProcessor.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerWriteProcessor.java @@ -162,6 +162,15 @@ public abstract class AbstractListenerWriteProcessor implements Processor implements Processor