Class DefaultBindingContext
- All Implemented Interfaces:
IBindingContext
IBindingContext
provided by this library.
This implementation caches Module information, which can dramatically improve read and write performance at the cost of some memory use. Thus, using the same singleton of this class across multiple I/O operations will improve overall read and write performance when processing the same types of data.
Serializers and deserializers provided by this class using the
newSerializer(Format, Class)
and
newDeserializer(Format, Class)
methods will
This class is synchronized and is thread-safe.
-
Nested Class Summary
Nested classes/interfaces inherited from interface gov.nist.secauto.metaschema.databind.IBindingContext
IBindingContext.IBindingMatcher, IBindingContext.IModuleLoaderStrategy, IBindingContext.ISchemaValidationProvider
-
Constructor Summary
ConstructorDescriptionConstruct a new binding context.DefaultBindingContext
(List<IModuleLoader.IModulePostProcessor> modulePostProcessors) Construct a new binding context. -
Method Summary
Modifier and TypeMethodDescription<CLASS extends IBoundObject>
CLASSdeepCopy
(CLASS other, IBoundObject parentInstance) Create a deep copy of the provided bound object.protected Collection<IBindingContext.IBindingMatcher>
Get the binding matchers that are associated with this class.Class<? extends IBoundObject>
getBoundClassForRootJsonName
(String rootName) Determine the bound class for the provided JSON/YAML property/item name using any registered matchers.Class<? extends IBoundObject>
getBoundClassForRootXmlQName
(QName rootQName) Determine the bound class for the provided XMLQName
.getBoundDefinitionForClass
(Class<? extends IBoundObject> clazz) Get theIBoundDefinitionModel
instance associated with the provided Java class.<TYPE extends IDataTypeAdapter<?>>
TYPEgetJavaTypeAdapterInstance
(Class<TYPE> clazz) Get's theIDataTypeAdapter
associated with the specified Java class, which is used to read and write XML, JSON, and YAML data to and from instances of that class.protected IBindingContext.IModuleLoaderStrategy
static DefaultBindingContext
instance()
Get the singleton instance of this binding context.Get a newIBoundLoader
instance.<CLASS extends IBoundObject>
IDeserializer<CLASS>newDeserializer
(Format format, Class<CLASS> clazz) Gets a dataIDeserializer
which can be used to read Java instance data for the provided class from the requested format.<CLASS extends IBoundObject>
ISerializer<CLASS>newSerializer
(Format format, Class<CLASS> clazz) Gets a dataISerializer
which can be used to write Java instance data for the provided class in the requested format.registerBindingMatcher
(IBoundDefinitionModelAssembly definition) Register a matcher used to identify a bound class by the definition's root name.registerBindingMatcher
(Class<? extends IBoundObject> clazz) Register a matcher used to identify a bound class by the definition's root name.registerClassBinding
(IBoundDefinitionModelComplex definition) Register a class binding for a given bound class.registerModule
(IModule module, Path compilePath) Generate, compile, and load a set of generated Module annotated Java classes based on the provided Modulemodule
.registerModule
(Class<? extends IBoundModule> clazz) Load a bound Metaschema module implemented by the provided class.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface gov.nist.secauto.metaschema.databind.IBindingContext
newValidator, validate, validate, validate, validateWithConstraints
-
Constructor Details
-
DefaultBindingContext
public DefaultBindingContext(@NonNull List<IModuleLoader.IModulePostProcessor> modulePostProcessors) Construct a new binding context.- Parameters:
modulePostProcessors
- a list of module post processors to call after loading a module
-
DefaultBindingContext
public DefaultBindingContext()Construct a new binding context.
-
-
Method Details
-
instance
Get the singleton instance of this binding context.- Returns:
- the binding context
-
getModuleLoaderStrategy
-
getBindingMatchers
Get the binding matchers that are associated with this class.- Returns:
- the list of matchers
- See Also:
-
registerBindingMatcher
@NonNull public final IBindingContext.IBindingMatcher registerBindingMatcher(@NonNull IBoundDefinitionModelAssembly definition) Description copied from interface:IBindingContext
Register a matcher used to identify a bound class by the definition's root name.- Specified by:
registerBindingMatcher
in interfaceIBindingContext
- Parameters:
definition
- the definition to match for- Returns:
- the matcher
-
registerBindingMatcher
public final IBindingContext.IBindingMatcher registerBindingMatcher(@NonNull Class<? extends IBoundObject> clazz) Description copied from interface:IBindingContext
Register a matcher used to identify a bound class by the definition's root name.- Specified by:
registerBindingMatcher
in interfaceIBindingContext
- Parameters:
clazz
- the definition class to match for, which must represent a root assembly definition- Returns:
- the matcher
-
registerClassBinding
public final IBoundDefinitionModelComplex registerClassBinding(IBoundDefinitionModelComplex definition) Description copied from interface:IBindingContext
Register a class binding for a given bound class.- Specified by:
registerClassBinding
in interfaceIBindingContext
- Parameters:
definition
- the bound class information to register- Returns:
- the old bound class information or
null
if no binding existed for the associated class
-
getBoundDefinitionForClass
public final IBoundDefinitionModelComplex getBoundDefinitionForClass(@NonNull Class<? extends IBoundObject> clazz) Description copied from interface:IBindingContext
Get theIBoundDefinitionModel
instance associated with the provided Java class.Typically the class will have a
MetaschemaAssembly
orMetaschemaField
annotation.- Specified by:
getBoundDefinitionForClass
in interfaceIBindingContext
- Parameters:
clazz
- the class binding to load- Returns:
- the associated class binding instance or
null
if the class is not bound
-
getJavaTypeAdapterInstance
public <TYPE extends IDataTypeAdapter<?>> TYPE getJavaTypeAdapterInstance(@NonNull Class<TYPE> clazz) Description copied from interface:IBindingContext
Get's theIDataTypeAdapter
associated with the specified Java class, which is used to read and write XML, JSON, and YAML data to and from instances of that class. Thus, this adapter supports a direct binding between the Java class and structured data in one of the supported formats. Adapters are used to support bindings for simple data objects (e.g.,String
,BigInteger
,ZonedDateTime
, etc).- Specified by:
getJavaTypeAdapterInstance
in interfaceIBindingContext
- Type Parameters:
TYPE
- the class type of the adapter- Parameters:
clazz
- the JavaClass
for the bound type- Returns:
- the adapter instance or
null
if the provided class is not bound
-
newSerializer
public <CLASS extends IBoundObject> ISerializer<CLASS> newSerializer(@NonNull Format format, @NonNull Class<CLASS> clazz) Gets a dataISerializer
which can be used to write Java instance data for the provided class in the requested format.The provided class must be a bound Java class with a
MetaschemaAssembly
orMetaschemaField
annotation for which aIBoundDefinitionModel
exists.A serializer returned by this method is thread-safe.
- Specified by:
newSerializer
in interfaceIBindingContext
- Type Parameters:
CLASS
- the Java type this serializer can write data from- Parameters:
format
- the format to serialize intoclazz
- the Java data object to serialize- Returns:
- the serializer instance
- See Also:
-
newDeserializer
public <CLASS extends IBoundObject> IDeserializer<CLASS> newDeserializer(@NonNull Format format, @NonNull Class<CLASS> clazz) Gets a dataIDeserializer
which can be used to read Java instance data for the provided class from the requested format.The provided class must be a bound Java class with a
MetaschemaAssembly
orMetaschemaField
annotation for which aIBoundDefinitionModel
exists.A deserializer returned by this method is thread-safe.
- Specified by:
newDeserializer
in interfaceIBindingContext
- Type Parameters:
CLASS
- the Java type this deserializer can read data into- Parameters:
format
- the format to serialize intoclazz
- the Java data type to serialize- Returns:
- the deserializer instance
- See Also:
-
registerModule
@NonNull public IBindingContext registerModule(@NonNull IModule module, @NonNull Path compilePath) throws IOException Description copied from interface:IBindingContext
Generate, compile, and load a set of generated Module annotated Java classes based on the provided Modulemodule
.- Specified by:
registerModule
in interfaceIBindingContext
- Parameters:
module
- the Module module to generate classes forcompilePath
- the path to the directory to generate classes in- Returns:
- this instance
- Throws:
IOException
- if an error occurred while generating or loading the classes
-
registerModule
Description copied from interface:IBindingContext
Load a bound Metaschema module implemented by the provided class.Also registers any associated bound classes.
Implementations are expected to return the same IModule instance for multiple calls to this method with the same class argument.
- Specified by:
registerModule
in interfaceIBindingContext
- Parameters:
clazz
- the class implementing a bound Metaschema module- Returns:
- the loaded module
-
getBoundClassForRootXmlQName
Description copied from interface:IBindingContext
Determine the bound class for the provided XMLQName
.- Specified by:
getBoundClassForRootXmlQName
in interfaceIBindingContext
- Parameters:
rootQName
- the root XML element's QName- Returns:
- the bound class or
null
if not recognized - See Also:
-
getBoundClassForRootJsonName
Description copied from interface:IBindingContext
Determine the bound class for the provided JSON/YAML property/item name using any registered matchers.- Specified by:
getBoundClassForRootJsonName
in interfaceIBindingContext
- Parameters:
rootName
- the JSON/YAML property/item name- Returns:
- the bound class or
null
if not recognized - See Also:
-
newBoundLoader
Description copied from interface:IBindingContext
Get a newIBoundLoader
instance.- Specified by:
newBoundLoader
in interfaceIBindingContext
- Returns:
- the instance
-
deepCopy
public <CLASS extends IBoundObject> CLASS deepCopy(@NonNull CLASS other, IBoundObject parentInstance) throws BindingException Description copied from interface:IBindingContext
Create a deep copy of the provided bound object.- Specified by:
deepCopy
in interfaceIBindingContext
- Type Parameters:
CLASS
- the bound object type- Parameters:
other
- the object to copyparentInstance
- the object's parent ornull
- Returns:
- a deep copy of the provided object
- Throws:
BindingException
- if an error occurred copying content between java instances
-