Class AbstractTypeMaterializer

  • All Implemented Interfaces:
    com.fasterxml.jackson.core.Versioned

    public class AbstractTypeMaterializer
    extends com.fasterxml.jackson.databind.AbstractTypeResolver
    implements com.fasterxml.jackson.core.Versioned
    Nifty class for pulling implementations of classes out of thin air.

    ... friends call him Mister Bean... :-)

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  AbstractTypeMaterializer.Feature
      Enumeration that defines togglable features that guide the serialization feature.
      (package private) static class  AbstractTypeMaterializer.MyClassLoader
      To support actual dynamic loading of bytecode we need a simple custom classloader.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected AbstractTypeMaterializer.MyClassLoader _classLoader
      We will use per-materializer class loader for now; would be nice to find a way to reduce number of class loaders (and hence number of generated classes!) constructed...
      protected java.lang.String _defaultPackage
      Package name to use as prefix for generated classes.
      protected int _featureFlags
      Bit set that contains all enabled features
      protected static int DEFAULT_FEATURE_FLAGS
      Bitfield (set of flags) of all Features that are enabled by default.
      static java.lang.String DEFAULT_PACKAGE_FOR_GENERATED
      Default package to use for generated classes.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected java.lang.Class<?> _loadAndResolve​(java.lang.String className, byte[] bytecode, java.lang.Class<?> rawType)  
      protected java.lang.Class<?> _materializeRawType​(com.fasterxml.jackson.databind.cfg.MapperConfig<?> config, com.fasterxml.jackson.databind.introspect.AnnotatedClass typeDef, java.lang.String nameToUse)  
      protected boolean _suitableType​(com.fasterxml.jackson.databind.JavaType type)
      Overridable helper method called to check if given non-concrete type should be materialized.
      void disable​(AbstractTypeMaterializer.Feature f)
      Method for disabling specified feature.
      void enable​(AbstractTypeMaterializer.Feature f)
      Method for enabling specified feature.
      boolean isEnabled​(AbstractTypeMaterializer.Feature f)
      Method for checking whether given feature is enabled or not
      java.lang.Class<?> materializeGenericType​(com.fasterxml.jackson.databind.cfg.MapperConfig<?> config, com.fasterxml.jackson.databind.JavaType type)  
      java.lang.Class<?> materializeRawType​(com.fasterxml.jackson.databind.cfg.MapperConfig<?> config, com.fasterxml.jackson.databind.introspect.AnnotatedClass typeDef)
      NOTE: should not be called for generic types.
      com.fasterxml.jackson.databind.JavaType resolveAbstractType​(com.fasterxml.jackson.databind.DeserializationConfig config, com.fasterxml.jackson.databind.BeanDescription beanDesc)
      Entry-point for AbstractTypeResolver that Jackson calls to materialize an abstract type.
      void set​(AbstractTypeMaterializer.Feature f, boolean state)
      Method for enabling or disabling specified feature.
      void setDefaultPackage​(java.lang.String defPkg)
      Method for specifying package to use for generated classes.
      com.fasterxml.jackson.core.Version version()
      Method that will return version information stored in and read from jar that contains this class.
      • Methods inherited from class com.fasterxml.jackson.databind.AbstractTypeResolver

        findTypeMapping, resolveAbstractType
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • DEFAULT_FEATURE_FLAGS

        protected static final int DEFAULT_FEATURE_FLAGS
        Bitfield (set of flags) of all Features that are enabled by default.
      • DEFAULT_PACKAGE_FOR_GENERATED

        public static final java.lang.String DEFAULT_PACKAGE_FOR_GENERATED
        Default package to use for generated classes.
        See Also:
        Constant Field Values
      • _classLoader

        protected final AbstractTypeMaterializer.MyClassLoader _classLoader
        We will use per-materializer class loader for now; would be nice to find a way to reduce number of class loaders (and hence number of generated classes!) constructed...
      • _featureFlags

        protected int _featureFlags
        Bit set that contains all enabled features
      • _defaultPackage

        protected java.lang.String _defaultPackage
        Package name to use as prefix for generated classes.
    • Constructor Detail

      • AbstractTypeMaterializer

        public AbstractTypeMaterializer()
      • AbstractTypeMaterializer

        public AbstractTypeMaterializer​(java.lang.ClassLoader parentClassLoader)
        Parameters:
        parentClassLoader - Class loader to use for generated classes; if null, will use class loader that loaded materializer itself.
    • Method Detail

      • version

        public com.fasterxml.jackson.core.Version version()
        Method that will return version information stored in and read from jar that contains this class.
        Specified by:
        version in interface com.fasterxml.jackson.core.Versioned
      • setDefaultPackage

        public void setDefaultPackage​(java.lang.String defPkg)
        Method for specifying package to use for generated classes.
      • resolveAbstractType

        public com.fasterxml.jackson.databind.JavaType resolveAbstractType​(com.fasterxml.jackson.databind.DeserializationConfig config,
                                                                           com.fasterxml.jackson.databind.BeanDescription beanDesc)
        Entry-point for AbstractTypeResolver that Jackson calls to materialize an abstract type.
        Overrides:
        resolveAbstractType in class com.fasterxml.jackson.databind.AbstractTypeResolver
      • materializeGenericType

        public java.lang.Class<?> materializeGenericType​(com.fasterxml.jackson.databind.cfg.MapperConfig<?> config,
                                                         com.fasterxml.jackson.databind.JavaType type)
        Since:
        2.4
      • materializeRawType

        public java.lang.Class<?> materializeRawType​(com.fasterxml.jackson.databind.cfg.MapperConfig<?> config,
                                                     com.fasterxml.jackson.databind.introspect.AnnotatedClass typeDef)
        NOTE: should not be called for generic types.
        Since:
        2.4
      • _materializeRawType

        protected java.lang.Class<?> _materializeRawType​(com.fasterxml.jackson.databind.cfg.MapperConfig<?> config,
                                                         com.fasterxml.jackson.databind.introspect.AnnotatedClass typeDef,
                                                         java.lang.String nameToUse)
      • _loadAndResolve

        protected java.lang.Class<?> _loadAndResolve​(java.lang.String className,
                                                     byte[] bytecode,
                                                     java.lang.Class<?> rawType)
      • _suitableType

        protected boolean _suitableType​(com.fasterxml.jackson.databind.JavaType type)
        Overridable helper method called to check if given non-concrete type should be materialized.

        Default implementation will blocks all

        • primitive types
        • Enums
        • Container types (Collections, Maps; as per Jackson "container type")
        • Reference types (Jackson definition

        Jackson 2.12 and earlier enumerated a small set of other types under java.lang and java.util: 2.13 and later simply block all types in java.*.

        Parameters:
        type - Type that we are asked to materialize
        Returns:
        True if materialization should proceed; false if not.