Skip to content

Commit d219054

Browse files
committed
Polish
1 parent 3015286 commit d219054

File tree

5 files changed

+111
-92
lines changed

5 files changed

+111
-92
lines changed

spring-web/src/main/java/org/springframework/http/server/reactive/AbstractListenerServerHttpResponse.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,22 @@
2626
import org.springframework.core.io.buffer.DataBufferFactory;
2727

2828
/**
29-
* Abstract base class for listener-based server responses, i.e. Servlet 3.1 and Undertow.
29+
* Abstract base class for listener-based server responses, e.g. Servlet 3.1
30+
* and Undertow.
31+
*
3032
* @author Arjen Poutsma
3133
* @since 5.0
3234
*/
3335
public abstract class AbstractListenerServerHttpResponse extends AbstractServerHttpResponse {
3436

3537
private final AtomicBoolean writeCalled = new AtomicBoolean();
3638

39+
3740
public AbstractListenerServerHttpResponse(DataBufferFactory dataBufferFactory) {
3841
super(dataBufferFactory);
3942
}
4043

44+
4145
@Override
4246
protected final Mono<Void> writeWithInternal(Publisher<DataBuffer> body) {
4347
return writeAndFlushWithInternal(Mono.just(body));
@@ -46,13 +50,13 @@ protected final Mono<Void> writeWithInternal(Publisher<DataBuffer> body) {
4650
@Override
4751
protected final Mono<Void> writeAndFlushWithInternal(Publisher<Publisher<DataBuffer>> body) {
4852
if (this.writeCalled.compareAndSet(false, true)) {
49-
Processor<Publisher<DataBuffer>, Void> bodyProcessor =
50-
createBodyFlushProcessor();
53+
Processor<Publisher<DataBuffer>, Void> bodyProcessor = createBodyFlushProcessor();
5154
return Mono.from(subscriber -> {
5255
body.subscribe(bodyProcessor);
5356
bodyProcessor.subscribe(subscriber);
5457
});
55-
} else {
58+
}
59+
else {
5660
return Mono.error(new IllegalStateException(
5761
"writeWith() or writeAndFlushWith() has already been called"));
5862
}
@@ -64,4 +68,5 @@ protected final Mono<Void> writeAndFlushWithInternal(Publisher<Publisher<DataBuf
6468
* {@link #writeAndFlushWithInternal(Publisher)}.
6569
*/
6670
protected abstract Processor<Publisher<DataBuffer>, Void> createBodyFlushProcessor();
71+
6772
}

spring-web/src/main/java/org/springframework/http/server/reactive/AbstractResponseBodyFlushProcessor.java

Lines changed: 40 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,25 @@
3535
* Servlet 3.1 and Undertow support.
3636
*
3737
* @author Arjen Poutsma
38+
* @author Violeta Georgieva
3839
* @since 5.0
3940
* @see ServletServerHttpRequest
4041
* @see UndertowHttpHandlerAdapter
4142
* @see ServerHttpResponse#writeAndFlushWith(Publisher)
4243
*/
43-
abstract class AbstractResponseBodyFlushProcessor
44-
implements Processor<Publisher<DataBuffer>, Void> {
44+
abstract class AbstractResponseBodyFlushProcessor implements Processor<Publisher<DataBuffer>, Void> {
4545

4646
protected final Log logger = LogFactory.getLog(getClass());
4747

48-
private final ResponseBodyWriteResultPublisher publisherDelegate =
49-
new ResponseBodyWriteResultPublisher();
48+
private final ResponseBodyWriteResultPublisher resultPublisher = new ResponseBodyWriteResultPublisher();
5049

51-
private final AtomicReference<State> state =
52-
new AtomicReference<>(State.UNSUBSCRIBED);
50+
private final AtomicReference<State> state = new AtomicReference<>(State.UNSUBSCRIBED);
5351

5452
private volatile boolean subscriberCompleted;
5553

5654
private Subscription subscription;
5755

56+
5857
// Subscriber
5958

6059
@Override
@@ -89,13 +88,15 @@ public final void onComplete() {
8988
this.state.get().onComplete(this);
9089
}
9190

91+
9292
// Publisher
9393

9494
@Override
9595
public final void subscribe(Subscriber<? super Void> subscriber) {
96-
this.publisherDelegate.subscribe(subscriber);
96+
this.resultPublisher.subscribe(subscriber);
9797
}
9898

99+
99100
/**
100101
* Creates a new processor for subscribing to a body chunk.
101102
*/
@@ -106,8 +107,9 @@ public final void subscribe(Subscriber<? super Void> subscriber) {
106107
*/
107108
protected abstract void flush() throws IOException;
108109

109-
private void cancel() {
110-
this.subscription.cancel();
110+
111+
private boolean changeState(State oldState, State newState) {
112+
return this.state.compareAndSet(oldState, newState);
111113
}
112114

113115
private void writeComplete() {
@@ -118,15 +120,17 @@ private void writeComplete() {
118120

119121
}
120122

121-
private boolean changeState(State oldState, State newState) {
122-
return this.state.compareAndSet(oldState, newState);
123+
private void cancel() {
124+
this.subscription.cancel();
123125
}
124126

127+
125128
private enum State {
129+
126130
UNSUBSCRIBED {
131+
127132
@Override
128-
public void onSubscribe(AbstractResponseBodyFlushProcessor processor,
129-
Subscription subscription) {
133+
public void onSubscribe(AbstractResponseBodyFlushProcessor processor, Subscription subscription) {
130134
Objects.requireNonNull(subscription, "Subscription cannot be null");
131135
if (processor.changeState(this, REQUESTED)) {
132136
processor.subscription = subscription;
@@ -138,25 +142,25 @@ public void onSubscribe(AbstractResponseBodyFlushProcessor processor,
138142
}
139143
},
140144
REQUESTED {
145+
141146
@Override
142-
public void onNext(AbstractResponseBodyFlushProcessor processor,
143-
Publisher<DataBuffer> chunk) {
147+
public void onNext(AbstractResponseBodyFlushProcessor processor, Publisher<DataBuffer> chunk) {
144148
if (processor.changeState(this, RECEIVED)) {
145-
Processor<DataBuffer, Void> chunkProcessor =
146-
processor.createBodyProcessor();
149+
Processor<DataBuffer, Void> chunkProcessor = processor.createBodyProcessor();
147150
chunk.subscribe(chunkProcessor);
148151
chunkProcessor.subscribe(new WriteSubscriber(processor));
149152
}
150153
}
151154

152155
@Override
153-
void onComplete(AbstractResponseBodyFlushProcessor processor) {
156+
public void onComplete(AbstractResponseBodyFlushProcessor processor) {
154157
if (processor.changeState(this, COMPLETED)) {
155-
processor.publisherDelegate.publishComplete();
158+
processor.resultPublisher.publishComplete();
156159
}
157160
}
158161
},
159162
RECEIVED {
163+
160164
@Override
161165
public void writeComplete(AbstractResponseBodyFlushProcessor processor) {
162166
try {
@@ -169,7 +173,7 @@ public void writeComplete(AbstractResponseBodyFlushProcessor processor) {
169173

170174
if (processor.subscriberCompleted) {
171175
if (processor.changeState(this, COMPLETED)) {
172-
processor.publisherDelegate.publishComplete();
176+
processor.resultPublisher.publishComplete();
173177
}
174178
}
175179
else {
@@ -180,11 +184,12 @@ public void writeComplete(AbstractResponseBodyFlushProcessor processor) {
180184
}
181185

182186
@Override
183-
void onComplete(AbstractResponseBodyFlushProcessor processor) {
187+
public void onComplete(AbstractResponseBodyFlushProcessor processor) {
184188
processor.subscriberCompleted = true;
185189
}
186190
},
187191
COMPLETED {
192+
188193
@Override
189194
public void onNext(AbstractResponseBodyFlushProcessor processor,
190195
Publisher<DataBuffer> publisher) {
@@ -193,40 +198,39 @@ public void onNext(AbstractResponseBodyFlushProcessor processor,
193198
}
194199

195200
@Override
196-
void onError(AbstractResponseBodyFlushProcessor processor, Throwable t) {
201+
public void onError(AbstractResponseBodyFlushProcessor processor, Throwable t) {
197202
// ignore
198203
}
199204

200205
@Override
201-
void onComplete(AbstractResponseBodyFlushProcessor processor) {
206+
public void onComplete(AbstractResponseBodyFlushProcessor processor) {
202207
// ignore
203208
}
204209
};
205210

206-
public void onSubscribe(AbstractResponseBodyFlushProcessor processor,
207-
Subscription subscription) {
211+
public void onSubscribe(AbstractResponseBodyFlushProcessor processor, Subscription subscription) {
208212
subscription.cancel();
209213
}
210214

211-
public void onNext(AbstractResponseBodyFlushProcessor processor,
212-
Publisher<DataBuffer> publisher) {
215+
public void onNext(AbstractResponseBodyFlushProcessor processor, Publisher<DataBuffer> publisher) {
213216
throw new IllegalStateException(toString());
214217
}
215218

216-
void onError(AbstractResponseBodyFlushProcessor processor, Throwable t) {
219+
public void onError(AbstractResponseBodyFlushProcessor processor, Throwable ex) {
217220
if (processor.changeState(this, COMPLETED)) {
218-
processor.publisherDelegate.publishError(t);
221+
processor.resultPublisher.publishError(ex);
219222
}
220223
}
221224

222-
void onComplete(AbstractResponseBodyFlushProcessor processor) {
225+
public void onComplete(AbstractResponseBodyFlushProcessor processor) {
223226
throw new IllegalStateException(toString());
224227
}
225228

226229
public void writeComplete(AbstractResponseBodyFlushProcessor processor) {
227230
// ignore
228231
}
229232

233+
230234
private static class WriteSubscriber implements Subscriber<Void> {
231235

232236
private final AbstractResponseBodyFlushProcessor processor;
@@ -236,23 +240,23 @@ public WriteSubscriber(AbstractResponseBodyFlushProcessor processor) {
236240
}
237241

238242
@Override
239-
public void onSubscribe(Subscription s) {
240-
s.request(Long.MAX_VALUE);
243+
public void onSubscribe(Subscription subscription) {
244+
subscription.request(Long.MAX_VALUE);
241245
}
242246

243247
@Override
244248
public void onNext(Void aVoid) {
245249
}
246250

247251
@Override
248-
public void onError(Throwable t) {
249-
processor.cancel();
250-
processor.onError(t);
252+
public void onError(Throwable ex) {
253+
this.processor.cancel();
254+
this.processor.onError(ex);
251255
}
252256

253257
@Override
254258
public void onComplete() {
255-
processor.writeComplete();
259+
this.processor.writeComplete();
256260
}
257261
}
258262
}

0 commit comments

Comments
 (0)