@@ -57,7 +57,7 @@ final class DefaultRSocketRequester implements RSocketRequester {
57
57
58
58
private final RSocketStrategies strategies ;
59
59
60
- private final DataBuffer emptyDataBuffer ;
60
+ private final Mono < DataBuffer > emptyBufferMono ;
61
61
62
62
63
63
DefaultRSocketRequester (
@@ -73,7 +73,7 @@ final class DefaultRSocketRequester implements RSocketRequester {
73
73
this .dataMimeType = dataMimeType ;
74
74
this .metadataMimeType = metadataMimeType ;
75
75
this .strategies = strategies ;
76
- this .emptyDataBuffer = this .strategies .dataBufferFactory ().wrap (new byte [0 ]);
76
+ this .emptyBufferMono = Mono . just ( this .strategies .dataBufferFactory ().wrap (new byte [0 ]) );
77
77
}
78
78
79
79
@@ -193,7 +193,7 @@ else if (adapter != null) {
193
193
}
194
194
195
195
if (isVoid (elementType ) || (adapter != null && adapter .isNoValue ())) {
196
- this .payloadMono = firstPayload ( Mono .when (publisher ).then (Mono . just ( emptyDataBuffer ) ));
196
+ this .payloadMono = Mono .when (publisher ).then (firstPayload ( emptyBufferMono ));
197
197
this .payloadFlux = null ;
198
198
return ;
199
199
}
@@ -204,7 +204,7 @@ else if (adapter != null) {
204
204
if (adapter != null && !adapter .isMultiValue ()) {
205
205
Mono <DataBuffer > data = Mono .from (publisher )
206
206
.map (value -> encodeData (value , elementType , encoder ))
207
- .defaultIfEmpty ( emptyDataBuffer );
207
+ .switchIfEmpty ( emptyBufferMono );
208
208
this .payloadMono = firstPayload (data );
209
209
this .payloadFlux = null ;
210
210
return ;
@@ -213,7 +213,7 @@ else if (adapter != null) {
213
213
this .payloadMono = null ;
214
214
this .payloadFlux = Flux .from (publisher )
215
215
.map (value -> encodeData (value , elementType , encoder ))
216
- .defaultIfEmpty ( emptyDataBuffer )
216
+ .switchIfEmpty ( emptyBufferMono )
217
217
.switchOnFirst ((signal , inner ) -> {
218
218
DataBuffer data = signal .get ();
219
219
if (data != null ) {
@@ -250,12 +250,7 @@ private Mono<Payload> firstPayload(Mono<DataBuffer> encodedData) {
250
250
251
251
@ Override
252
252
public Mono <Void > send () {
253
- return getPayloadMonoRequired ().flatMap (rsocket ::fireAndForget );
254
- }
255
-
256
- private Mono <Payload > getPayloadMonoRequired () {
257
- Assert .state (this .payloadFlux == null , "No RSocket interaction model for Flux request to Mono response." );
258
- return this .payloadMono != null ? this .payloadMono : firstPayload (Mono .just (emptyDataBuffer ));
253
+ return getPayloadMono ().flatMap (rsocket ::fireAndForget );
259
254
}
260
255
261
256
@ Override
@@ -268,19 +263,9 @@ public <T> Mono<T> retrieveMono(ParameterizedTypeReference<T> dataTypeRef) {
268
263
return retrieveMono (ResolvableType .forType (dataTypeRef ));
269
264
}
270
265
271
- @ Override
272
- public <T > Flux <T > retrieveFlux (Class <T > dataType ) {
273
- return retrieveFlux (ResolvableType .forClass (dataType ));
274
- }
275
-
276
- @ Override
277
- public <T > Flux <T > retrieveFlux (ParameterizedTypeReference <T > dataTypeRef ) {
278
- return retrieveFlux (ResolvableType .forType (dataTypeRef ));
279
- }
280
-
281
266
@ SuppressWarnings ("unchecked" )
282
267
private <T > Mono <T > retrieveMono (ResolvableType elementType ) {
283
- Mono <Payload > payloadMono = getPayloadMonoRequired ().flatMap (rsocket ::requestResponse );
268
+ Mono <Payload > payloadMono = getPayloadMono ().flatMap (rsocket ::requestResponse );
284
269
285
270
if (isVoid (elementType )) {
286
271
return (Mono <T >) payloadMono .then ();
@@ -291,11 +276,22 @@ private <T> Mono<T> retrieveMono(ResolvableType elementType) {
291
276
.map (dataBuffer -> decoder .decode (dataBuffer , elementType , dataMimeType , EMPTY_HINTS ));
292
277
}
293
278
279
+ @ Override
280
+ public <T > Flux <T > retrieveFlux (Class <T > dataType ) {
281
+ return retrieveFlux (ResolvableType .forClass (dataType ));
282
+ }
283
+
284
+ @ Override
285
+ public <T > Flux <T > retrieveFlux (ParameterizedTypeReference <T > dataTypeRef ) {
286
+ return retrieveFlux (ResolvableType .forType (dataTypeRef ));
287
+ }
288
+
294
289
@ SuppressWarnings ("unchecked" )
295
290
private <T > Flux <T > retrieveFlux (ResolvableType elementType ) {
296
- Flux <Payload > payloadFlux = this .payloadMono != null ?
297
- this .payloadMono .flatMapMany (rsocket ::requestStream ) :
298
- rsocket .requestChannel (this .payloadFlux );
291
+
292
+ Flux <Payload > payloadFlux = (this .payloadFlux != null ?
293
+ rsocket .requestChannel (this .payloadFlux ) :
294
+ getPayloadMono ().flatMapMany (rsocket ::requestStream ));
299
295
300
296
if (isVoid (elementType )) {
301
297
return payloadFlux .thenMany (Flux .empty ());
@@ -306,6 +302,11 @@ private <T> Flux<T> retrieveFlux(ResolvableType elementType) {
306
302
(T ) decoder .decode (dataBuffer , elementType , dataMimeType , EMPTY_HINTS ));
307
303
}
308
304
305
+ private Mono <Payload > getPayloadMono () {
306
+ Assert .state (this .payloadFlux == null , "No RSocket interaction with Flux request and Mono response." );
307
+ return this .payloadMono != null ? this .payloadMono : firstPayload (emptyBufferMono );
308
+ }
309
+
309
310
private DataBuffer retainDataAndReleasePayload (Payload payload ) {
310
311
return PayloadUtils .retainDataAndReleasePayload (payload , bufferFactory ());
311
312
}
0 commit comments