@ -24,6 +24,7 @@ import java.util.concurrent.CompletableFuture;
@@ -24,6 +24,7 @@ import java.util.concurrent.CompletableFuture;
import javax.xml.bind.annotation.XmlElement ;
import javax.xml.bind.annotation.XmlRootElement ;
import io.reactivex.Flowable ;
import org.junit.Test ;
import org.reactivestreams.Publisher ;
import reactor.core.publisher.Flux ;
@ -103,6 +104,18 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
@@ -103,6 +104,18 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
assertEquals ( expected , performGet ( "/raw-response/observable" , null , String . class ) . getBody ( ) ) ;
}
@Test
public void byteBufferResponseBodyWithRxJava2Observable ( ) throws Exception {
String expected = "Hello!" ;
assertEquals ( expected , performGet ( "/raw-response/rxjava2-observable" , null , String . class ) . getBody ( ) ) ;
}
@Test
public void byteBufferResponseBodyWithFlowable ( ) throws Exception {
String expected = "Hello!" ;
assertEquals ( expected , performGet ( "/raw-response/flowable" , null , String . class ) . getBody ( ) ) ;
}
@Test
public void personResponseBody ( ) throws Exception {
Person expected = new Person ( "Robert" ) ;
@ -196,6 +209,13 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
@@ -196,6 +209,13 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
JSON , Person . class ) . getBody ( ) ) ;
}
@Test
public void personTransformWithRxJava2Single ( ) throws Exception {
assertEquals ( new Person ( "ROBERT" ) ,
performPost ( "/person-transform/rxjava2-single" , JSON , new Person ( "Robert" ) ,
JSON , Person . class ) . getBody ( ) ) ;
}
@Test
public void personTransformWithPublisher ( ) throws Exception {
List < ? > req = asList ( new Person ( "Robert" ) , new Person ( "Marie" ) ) ;
@ -217,6 +237,20 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
@@ -217,6 +237,20 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
assertEquals ( res , performPost ( "/person-transform/observable" , JSON , req , JSON , PERSON_LIST ) . getBody ( ) ) ;
}
@Test
public void personTransformWithRxJava2Observable ( ) throws Exception {
List < ? > req = asList ( new Person ( "Robert" ) , new Person ( "Marie" ) ) ;
List < ? > res = asList ( new Person ( "ROBERT" ) , new Person ( "MARIE" ) ) ;
assertEquals ( res , performPost ( "/person-transform/rxjava2-observable" , JSON , req , JSON , PERSON_LIST ) . getBody ( ) ) ;
}
@Test
public void personTransformWithFlowable ( ) throws Exception {
List < ? > req = asList ( new Person ( "Robert" ) , new Person ( "Marie" ) ) ;
List < ? > res = asList ( new Person ( "ROBERT" ) , new Person ( "MARIE" ) ) ;
assertEquals ( res , performPost ( "/person-transform/flowable" , JSON , req , JSON , PERSON_LIST ) . getBody ( ) ) ;
}
@Test
public void personCreateWithPublisherJson ( ) throws Exception {
ResponseEntity < Void > entity = performPost ( "/person-create/publisher" , JSON ,
@ -253,6 +287,15 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
@@ -253,6 +287,15 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
assertEquals ( 1 , getApplicationContext ( ) . getBean ( PersonCreateController . class ) . persons . size ( ) ) ;
}
@Test
public void personCreateWithRxJava2Single ( ) throws Exception {
ResponseEntity < Void > entity = performPost (
"/person-create/rxjava2-single" , JSON , new Person ( "Robert" ) , null , Void . class ) ;
assertEquals ( HttpStatus . OK , entity . getStatusCode ( ) ) ;
assertEquals ( 1 , getApplicationContext ( ) . getBean ( PersonCreateController . class ) . persons . size ( ) ) ;
}
@Test
public void personCreateWithFluxJson ( ) throws Exception {
ResponseEntity < Void > entity = performPost ( "/person-create/flux" , JSON ,
@ -280,6 +323,15 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
@@ -280,6 +323,15 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
assertEquals ( 2 , getApplicationContext ( ) . getBean ( PersonCreateController . class ) . persons . size ( ) ) ;
}
@Test
public void personCreateWithRxJava2ObservableJson ( ) throws Exception {
ResponseEntity < Void > entity = performPost ( "/person-create/rxjava2-observable" , JSON ,
asList ( new Person ( "Robert" ) , new Person ( "Marie" ) ) , null , Void . class ) ;
assertEquals ( HttpStatus . OK , entity . getStatusCode ( ) ) ;
assertEquals ( 2 , getApplicationContext ( ) . getBean ( PersonCreateController . class ) . persons . size ( ) ) ;
}
@Test
public void personCreateWithObservableXml ( ) throws Exception {
People people = new People ( new Person ( "Robert" ) , new Person ( "Marie" ) ) ;
@ -289,6 +341,33 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
@@ -289,6 +341,33 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
assertEquals ( 2 , getApplicationContext ( ) . getBean ( PersonCreateController . class ) . persons . size ( ) ) ;
}
@Test
public void personCreateWithRxJava2ObservableXml ( ) throws Exception {
People people = new People ( new Person ( "Robert" ) , new Person ( "Marie" ) ) ;
ResponseEntity < Void > response = performPost ( "/person-create/rxjava2-observable" , APPLICATION_XML , people , null , Void . class ) ;
assertEquals ( HttpStatus . OK , response . getStatusCode ( ) ) ;
assertEquals ( 2 , getApplicationContext ( ) . getBean ( PersonCreateController . class ) . persons . size ( ) ) ;
}
@Test
public void personCreateWithFlowableJson ( ) throws Exception {
ResponseEntity < Void > entity = performPost ( "/person-create/flowable" , JSON ,
asList ( new Person ( "Robert" ) , new Person ( "Marie" ) ) , null , Void . class ) ;
assertEquals ( HttpStatus . OK , entity . getStatusCode ( ) ) ;
assertEquals ( 2 , getApplicationContext ( ) . getBean ( PersonCreateController . class ) . persons . size ( ) ) ;
}
@Test
public void personCreateWithFlowableXml ( ) throws Exception {
People people = new People ( new Person ( "Robert" ) , new Person ( "Marie" ) ) ;
ResponseEntity < Void > response = performPost ( "/person-create/flowable" , APPLICATION_XML , people , null , Void . class ) ;
assertEquals ( HttpStatus . OK , response . getStatusCode ( ) ) ;
assertEquals ( 2 , getApplicationContext ( ) . getBean ( PersonCreateController . class ) . persons . size ( ) ) ;
}
@Configuration
@ComponentScan ( resourcePattern = "**/RequestMappingMessageConversionIntegrationTests$*.class" )
@ -319,6 +398,16 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
@@ -319,6 +398,16 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
public Observable < ByteBuffer > getObservable ( ) {
return Observable . just ( ByteBuffer . wrap ( "Hello!" . getBytes ( ) ) ) ;
}
@GetMapping ( "/rxjava2-observable" )
public io . reactivex . Observable < ByteBuffer > getRxJava2Observable ( ) {
return io . reactivex . Observable . just ( ByteBuffer . wrap ( "Hello!" . getBytes ( ) ) ) ;
}
@GetMapping ( "/flowable" )
public Flowable < ByteBuffer > getFlowable ( ) {
return Flowable . just ( ByteBuffer . wrap ( "Hello!" . getBytes ( ) ) ) ;
}
}
@RestController
@ -409,6 +498,11 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
@@ -409,6 +498,11 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
return personFuture . map ( person - > new Person ( person . getName ( ) . toUpperCase ( ) ) ) ;
}
@PostMapping ( "/rxjava2-single" )
public io . reactivex . Single < Person > transformRxJava2Single ( @RequestBody io . reactivex . Single < Person > personFuture ) {
return personFuture . map ( person - > new Person ( person . getName ( ) . toUpperCase ( ) ) ) ;
}
@PostMapping ( "/publisher" )
public Publisher < Person > transformPublisher ( @RequestBody Publisher < Person > persons ) {
return Flux
@ -425,6 +519,16 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
@@ -425,6 +519,16 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
public Observable < Person > transformObservable ( @RequestBody Observable < Person > persons ) {
return persons . map ( person - > new Person ( person . getName ( ) . toUpperCase ( ) ) ) ;
}
@PostMapping ( "/rxjava2-observable" )
public io . reactivex . Observable < Person > transformObservable ( @RequestBody io . reactivex . Observable < Person > persons ) {
return persons . map ( person - > new Person ( person . getName ( ) . toUpperCase ( ) ) ) ;
}
@PostMapping ( "/flowable" )
public Flowable < Person > transformFlowable ( @RequestBody Flowable < Person > persons ) {
return persons . map ( person - > new Person ( person . getName ( ) . toUpperCase ( ) ) ) ;
}
}
@RestController
@ -449,6 +553,11 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
@@ -449,6 +553,11 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
return single . map ( persons : : add ) . toCompletable ( ) ;
}
@PostMapping ( "/rxjava2-single" )
public io . reactivex . Completable createWithRxJava2Single ( @RequestBody io . reactivex . Single < Person > single ) {
return single . map ( persons : : add ) . toCompletable ( ) ;
}
@PostMapping ( "/flux" )
public Mono < Void > createWithFlux ( @RequestBody Flux < Person > flux ) {
return flux . doOnNext ( persons : : add ) . then ( ) ;
@ -458,6 +567,16 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
@@ -458,6 +567,16 @@ public class RequestMappingMessageConversionIntegrationTests extends AbstractReq
public Observable < Void > createWithObservable ( @RequestBody Observable < Person > observable ) {
return observable . toList ( ) . doOnNext ( persons : : addAll ) . flatMap ( document - > Observable . empty ( ) ) ;
}
@PostMapping ( "/rxjava2-observable" )
public io . reactivex . Observable < Void > createWithRxJava2Observable ( @RequestBody io . reactivex . Observable < Person > observable ) {
return observable . toList ( ) . doOnNext ( persons : : addAll ) . flatMap ( document - > io . reactivex . Observable . empty ( ) ) ;
}
@PostMapping ( "/flowable" )
public Flowable < Void > createWithFlowable ( @RequestBody Flowable < Person > flowable ) {
return flowable . toList ( ) . doOnNext ( persons : : addAll ) . flatMap ( document - > Flowable . empty ( ) ) ;
}
}
@XmlRootElement @SuppressWarnings ( "WeakerAccess" )