Class RuntimeEnv

java.lang.Object
io.protostuff.runtime.RuntimeEnv

public final class RuntimeEnv extends Object
The runtime environment.
  • Field Details

    • JAVA_9_AND_ABOVE

      public static final boolean JAVA_9_AND_ABOVE
      true for JDKs 9, 10, 11, etc; false for 1.8 and below.
    • ENUMS_BY_NAME

      public static final boolean ENUMS_BY_NAME
      Returns true if serializing enums by name is activated. Disabled by default.
    • AUTO_LOAD_POLYMORPHIC_CLASSES

      public static final boolean AUTO_LOAD_POLYMORPHIC_CLASSES
      Enabled by default. For security purposes, you probably would want to register all known classes and disable this option.
    • PRESERVE_NULL_ELEMENTS

      public static final boolean PRESERVE_NULL_ELEMENTS
      Disabled by default. Writes a sentinel value (uint32) in place of null values in collections/arrays. Works only on the binary formats (protostuff/graph/protobuf).
    • MORPH_NON_FINAL_POJOS

      public static final boolean MORPH_NON_FINAL_POJOS
      Disabled by default. For pojos that are not declared final, they could still be morphed to their respective subclasses (inheritance). Enable this option if your parent classes aren't abstract classes.
    • MORPH_COLLECTION_INTERFACES

      public static final boolean MORPH_COLLECTION_INTERFACES
      Disabled by default. If true, type metadata will be included on serialization for fields that are collection interfaces. Enabling this is useful if you want to retain the actual collection impl used.

      If disabled, type metadata will not be included and instead, will be mapped to a default impl.

       Collection = ArrayList
       List = ArrayList
       Set = HashSet
       SortedSet = TreeSet
       NavigableSet = TreeSet
       Queue = LinkedList
       BlockingQueue = LinkedBlockingQueue
       Deque = LinkedList
       BlockingDequeue = LinkedBlockingDeque
       

      You can optionally enable only for a particular field by annotating it with Morph.

    • MORPH_MAP_INTERFACES

      public static final boolean MORPH_MAP_INTERFACES
      Disabled by default. If true, type metadata will be included on serialization for fields that are map interfaces. Enabling this is useful if you want to retain the actual map impl used.

      If disabled, type metadata will not be included and instead, will be mapped to a default impl.

       Map = HashMap
       SortedMap = TreeMap
       NavigableMap = TreeMap
       ConcurrentMap = ConcurrentHashMap
       ConcurrentNavigableMap = ConcurrentSkipListMap
       

      You can optionally enable only for a particular field by annotating it with Morph.

    • COLLECTION_SCHEMA_ON_REPEATED_FIELDS

      public static final boolean COLLECTION_SCHEMA_ON_REPEATED_FIELDS
      On repeated fields, the List/Collection itself is not serialized (only its values). If you enable this option, the repeated field will be serialized as a standalone message with a collection schema. Even if the List/Collection is empty, an empty collection message is still written.

      This is particularly useful if you rely on Object.equals(Object) on your pojos.

      Disabled by default for protobuf compatibility.

    • POJO_SCHEMA_ON_COLLECTION_FIELDS

      public static final boolean POJO_SCHEMA_ON_COLLECTION_FIELDS
      Disabled by default. If enabled, a list's internal state/fields will be serialized instead of just its elements.
    • POJO_SCHEMA_ON_MAP_FIELDS

      public static final boolean POJO_SCHEMA_ON_MAP_FIELDS
      Disabled by default. If enabled, a map's internal state/fields will be serialized instead of just its elements.
    • USE_SUN_MISC_UNSAFE

      public static final boolean USE_SUN_MISC_UNSAFE
      If true, sun.misc.Unsafe is used to access the fields of the objects instead of plain java reflections. Enabled by default if running on a sun jre.
    • ALWAYS_USE_SUN_REFLECTION_FACTORY

      public static final boolean ALWAYS_USE_SUN_REFLECTION_FACTORY
      If true, the constructor will always be obtained from ReflectionFactory.newConstructorFromSerialization.

      Disabled by default, which means that if the pojo has a no-args constructor, that will be used instead.

      Enable this if you intend to avoid deserializing objects whose no-args constructor initializes (unwanted) internal state. This applies to complex/framework objects.

      If you intend to fill default field values using your default constructor, leave this disabled. This normally applies to java beans/data objects.

    • NEVER_USE_SUN_REFLECTION_FACTORY

      public static final boolean NEVER_USE_SUN_REFLECTION_FACTORY
      If true, the constructor will never be obtained from ReflectionFactory.newConstructorFromSerialization.

      Disabled by default, which means that if the pojo has no default constructor, sun reflection will be instead.

      Enable this if you intend to enforce filling default field values using your default constructor. This applies to complex/framework objects which may be designed with non-default constructors only. Usually it only makes sense to use this option in your development environment to fail fast on those objects instead of deferring a problem of non-initialized fields to later stages.

    • newInstanceFromObjectInputStream

      static final Method newInstanceFromObjectInputStream
    • OBJECT_CONSTRUCTOR

      static final Constructor<Object> OBJECT_CONSTRUCTOR
    • ID_STRATEGY

      public static final IdStrategy ID_STRATEGY
  • Constructor Details

    • RuntimeEnv

      private RuntimeEnv()
  • Method Details

    • getMethodNewInstanceFromObjectInputStream

      private static Method getMethodNewInstanceFromObjectInputStream()
    • loadClass

      static <T> Class<T> loadClass(String className)
    • newInstantiator

      public static <T> RuntimeEnv.Instantiator<T> newInstantiator(Class<T> clazz)
      Returns an instatiator for the specified clazz.
    • getConstructor

      private static <T> Constructor<T> getConstructor(Class<T> clazz)