diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java index 4c02fe39b0f..22f012e594d 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpRequest.java @@ -69,6 +69,7 @@ public class ServletServerHttpRequest extends AbstractServerHttpRequest { Assert.notNull(bufferFactory, "'bufferFactory' must not be null"); Assert.isTrue(bufferSize > 0, "'bufferSize' must be higher than 0"); + this.request = request; this.dataBufferFactory = bufferFactory; this.bufferSize = bufferSize; diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java index 0abc0ccc515..7967d2dcb75 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ServletServerHttpResponse.java @@ -61,11 +61,16 @@ public class ServletServerHttpResponse extends AbstractListenerServerHttpRespons DataBufferFactory dataBufferFactory, int bufferSize) throws IOException { super(dataBufferFactory); + Assert.notNull(response, "HttpServletResponse must not be null"); Assert.notNull(dataBufferFactory, "DataBufferFactory must not be null"); Assert.isTrue(bufferSize > 0, "Buffer size must be higher than 0"); + this.response = response; this.bufferSize = bufferSize; + + // Tomcat expects WriteListener registration on initial thread + registerListener(); } @@ -119,14 +124,13 @@ public class ServletServerHttpResponse extends AbstractListenerServerHttpRespons @Override protected Processor, Void> createBodyFlushProcessor() { ResponseBodyFlushProcessor processor = new ResponseBodyFlushProcessor(); - registerListener(); - bodyFlushProcessor = processor; + this.bodyFlushProcessor = processor; return processor; } private void registerListener() { try { - outputStream().setWriteListener(writeListener); + outputStream().setWriteListener(this.writeListener); } catch (IOException ex) { throw new UncheckedIOException(ex);