public class CoderRegistry
extends java.lang.Object
CoderRegistry
allows creating a Coder
for a given Java class
or
type descriptor
.
Creation of the Coder
is delegated to one of the many registered
coder providers
based upon the registration order.
By default, the coder provider
precedence order is as follows:
registerCoderProvider(CoderProvider)
.CoderProviderRegistrar
using
a ServiceLoader
. Note that the ServiceLoader
registration order is
consistent but may change due to the addition or removal of libraries exposed
to the application. This can impact the coder returned if multiple coder providers
are capable of supplying a coder for the specified type.Note that if multiple coder providers
can provide a Coder
for
a given type, the precedence order above defines which CoderProvider
is chosen.
Modifier and Type | Method and Description |
---|---|
static CoderRegistry |
createDefault()
Creates a CoderRegistry containing registrations for all standard coders part of the core Java
Apache Beam SDK and also any registrations provided by
coder registrars . |
<T,OutputT> |
getCoder(java.lang.Class<? extends T> subClass,
java.lang.Class<T> baseClass,
java.util.Map<java.lang.reflect.Type,? extends Coder<?>> knownCoders,
java.lang.reflect.TypeVariable<?> param)
Deprecated.
This method is to change in an unknown backwards incompatible way once support for
this functionality is refined.
|
<T> Coder<T> |
getCoder(java.lang.Class<T> clazz)
Returns the
Coder to use for values of the given class. |
<InputT,OutputT> |
getCoder(TypeDescriptor<OutputT> typeDescriptor,
TypeDescriptor<InputT> inputTypeDescriptor,
Coder<InputT> inputCoder)
Deprecated.
This method is to change in an unknown backwards incompatible way once support for
this functionality is refined.
|
<T> Coder<T> |
getCoder(TypeDescriptor<T> type)
Returns the
Coder to use for values of the given type. |
<InputT,OutputT> |
getOutputCoder(SerializableFunction<InputT,OutputT> fn,
Coder<InputT> inputCoder)
Deprecated.
This method is to change in an unknown backwards incompatible way once support for
this functionality is refined.
|
void |
registerCoderForClass(java.lang.Class<?> clazz,
Coder<?> coder)
Registers the provided
Coder for the given class. |
void |
registerCoderForType(TypeDescriptor<?> type,
Coder<?> coder)
Registers the provided
Coder for the given type. |
void |
registerCoderProvider(CoderProvider coderProvider)
|
public static CoderRegistry createDefault()
coder registrars
.
Multiple registrations which can produce a coder for a given type result in a Coder created by the (in order of precedence):
coder providers
registered programmatically through
registerCoderProvider(org.apache.beam.sdk.coders.CoderProvider)
.coder providers
for core types found within the Apache Beam Java
SDK being used.coder providers
from the CoderProviderRegistrar
with the lexicographically smallest class name
being used.public void registerCoderProvider(CoderProvider coderProvider)
coderProvider
as a potential CoderProvider
which can produce
Coder
instances.
This method prioritizes this CoderProvider
over all prior registered coders.
See CoderProviders
for common CoderProvider
patterns.
public void registerCoderForClass(java.lang.Class<?> clazz, Coder<?> coder)
Coder
for the given class.
Note that this is equivalent to registerCoderForType(TypeDescriptor.of(clazz))
. See
registerCoderForType(TypeDescriptor, Coder)
for further details.
public void registerCoderForType(TypeDescriptor<?> type, Coder<?> coder)
Coder
for the given type.
Note that this is equivalent to
registerCoderProvider(CoderProviders.forCoder(type, coder))
. See
registerCoderProvider(org.apache.beam.sdk.coders.CoderProvider)
and CoderProviders.forCoder(org.apache.beam.sdk.values.TypeDescriptor<?>, org.apache.beam.sdk.coders.Coder<?>)
for further details.
public <T> Coder<T> getCoder(java.lang.Class<T> clazz) throws CannotProvideCoderException
Coder
to use for values of the given class.CannotProvideCoderException
- if a Coder
cannot be providedpublic <T> Coder<T> getCoder(TypeDescriptor<T> type) throws CannotProvideCoderException
Coder
to use for values of the given type.CannotProvideCoderException
- if a Coder
cannot be provided@Deprecated @Internal public <InputT,OutputT> Coder<OutputT> getCoder(TypeDescriptor<OutputT> typeDescriptor, TypeDescriptor<InputT> inputTypeDescriptor, Coder<InputT> inputCoder) throws CannotProvideCoderException
CannotProvideCoderException
- if a Coder
cannot be provided@Deprecated @Internal public <InputT,OutputT> Coder<OutputT> getOutputCoder(SerializableFunction<InputT,OutputT> fn, Coder<InputT> inputCoder) throws CannotProvideCoderException
Coder
to use on elements produced by this function, given the Coder
used for its input elements.CannotProvideCoderException
- if a Coder
cannot be provided@Deprecated @Internal public <T,OutputT> Coder<OutputT> getCoder(java.lang.Class<? extends T> subClass, java.lang.Class<T> baseClass, java.util.Map<java.lang.reflect.Type,? extends Coder<?>> knownCoders, java.lang.reflect.TypeVariable<?> param) throws CannotProvideCoderException
Coder
to use for the specified type parameter specialization of the
subclass, given Coders
to use for all other type parameters (if any).CannotProvideCoderException
- if a Coder
cannot be provided