public class ReactiveAdapterRegistry
extends java.lang.Object
Publisher
to/from
various async/reactive types such as CompletableFuture
, RxJava
Observable
, and others.
By default, depending on classpath availability, adapters are registered
for Reactor, RxJava 1, RxJava 2 types, CompletableFuture
, and Java 9+
Flow.Publisher
.
Modifier and Type | Class and Description |
---|---|
private static class |
ReactiveAdapterRegistry.ReactorAdapter
ReactiveAdapter variant that wraps adapted Publishers as
Flux or
Mono depending on ReactiveTypeDescriptor.isMultiValue() . |
private static class |
ReactiveAdapterRegistry.ReactorJdkFlowAdapterRegistrar |
private static class |
ReactiveAdapterRegistry.ReactorRegistrar |
private static class |
ReactiveAdapterRegistry.RxJava1Registrar |
private static class |
ReactiveAdapterRegistry.RxJava2Registrar |
Modifier and Type | Field and Description |
---|---|
private java.util.List<ReactiveAdapter> |
adapters |
private boolean |
reactorPresent |
private static ReactiveAdapterRegistry |
sharedInstance |
Constructor and Description |
---|
ReactiveAdapterRegistry()
Create a registry and auto-register default adapters.
|
Modifier and Type | Method and Description |
---|---|
ReactiveAdapter |
getAdapter(java.lang.Class<?> reactiveType)
Get the adapter for the given reactive type.
|
ReactiveAdapter |
getAdapter(java.lang.Class<?> reactiveType,
java.lang.Object source)
Get the adapter for the given reactive type.
|
static ReactiveAdapterRegistry |
getSharedInstance()
Return a shared default
ReactiveAdapterRegistry instance,
lazily building it once needed. |
boolean |
hasAdapters()
Whether the registry has any adapters which would be the case if any of
Reactor, RxJava 2, or RxJava 1 (+ RxJava Reactive Streams bridge) are
present on the classpath.
|
void |
registerReactiveType(ReactiveTypeDescriptor descriptor,
java.util.function.Function<java.lang.Object,<any>> toAdapter,
java.util.function.Function<<any>,java.lang.Object> fromAdapter)
Register a reactive type along with functions to adapt to and from a
Reactive Streams
Publisher . |
@Nullable private static volatile ReactiveAdapterRegistry sharedInstance
private final boolean reactorPresent
private final java.util.List<ReactiveAdapter> adapters
public ReactiveAdapterRegistry()
getSharedInstance()
public boolean hasAdapters()
public void registerReactiveType(ReactiveTypeDescriptor descriptor, java.util.function.Function<java.lang.Object,<any>> toAdapter, java.util.function.Function<<any>,java.lang.Object> fromAdapter)
Publisher
. The function arguments assume that
their input is neither null
nor Optional
.@Nullable public ReactiveAdapter getAdapter(java.lang.Class<?> reactiveType)
null
if none available@Nullable public ReactiveAdapter getAdapter(@Nullable java.lang.Class<?> reactiveType, @Nullable java.lang.Object source)
reactiveType
- the reactive type
(may be null
if a concrete source object is given)source
- an instance of the reactive type
(i.e. to adapt from; may be null
if the reactive type is specified)null
if none availablepublic static ReactiveAdapterRegistry getSharedInstance()
ReactiveAdapterRegistry
instance,
lazily building it once needed.
NOTE: We highly recommend passing a long-lived, pre-configured
ReactiveAdapterRegistry
instance for customization purposes.
This accessor is only meant as a fallback for code paths that want to
fall back on a default instance if one isn't provided.
ReactiveAdapterRegistry
instance