com.fasterxml.jackson.databind.deser

Class BeanDeserializerBase

    • Field Detail

      • TEMP_PROPERTY_NAME

        protected static final PropertyName TEMP_PROPERTY_NAME
      • _beanType

        protected final JavaType _beanType
        Declared type of the bean this deserializer handles.
      • _serializationShape

        protected final com.fasterxml.jackson.annotation.JsonFormat.Shape _serializationShape
        Requested shape from bean class annotations.
      • _valueInstantiator

        protected final ValueInstantiator _valueInstantiator
        Object that handles details of constructing initial bean value (to which bind data to), unless instance is passed (via updateValue())
      • _delegateDeserializer

        protected JsonDeserializer<Object> _delegateDeserializer
        Deserializer that is used iff delegate-based creator is to be used for deserializing from JSON Object.
      • _propertyBasedCreator

        protected PropertyBasedCreator _propertyBasedCreator
        If the bean needs to be instantiated using constructor or factory method that takes one or more named properties as argument(s), this creator is used for instantiation. This value gets resolved during general resolution.
      • _nonStandardCreation

        protected boolean _nonStandardCreation
        Flag that is set to mark "non-standard" cases; where either we use one of non-default creators, or there are unwrapped values to consider.
      • _vanillaProcessing

        protected boolean _vanillaProcessing
        Flag that indicates that no "special features" whatsoever are enabled, so the simplest processing is possible.
      • _beanProperties

        protected final BeanPropertyMap _beanProperties
        Mapping of property names to properties, built when all properties to use have been successfully resolved.
      • _injectables

        protected final ValueInjector[] _injectables
        List of ValueInjectors, if any injectable values are expected by the bean; otherwise null. This includes injectors used for injecting values via setters and fields, but not ones passed through constructor parameters.
      • _anySetter

        protected SettableAnyProperty _anySetter
        Fallback setter used for handling any properties that are not mapped to regular setters. If setter is not null, it will be called once for each such property.
      • _ignorableProps

        protected final HashSet<String> _ignorableProps
        In addition to properties that are set, we will also keep track of recognized but ignorable properties: these will be skipped without errors or warnings.
      • _ignoreAllUnknown

        protected final boolean _ignoreAllUnknown
        Flag that can be set to ignore and skip unknown properties. If set, will not throw an exception for unknown properties.
      • _needViewProcesing

        protected final boolean _needViewProcesing
        Flag that indicates that some aspect of deserialization depends on active view used (if any)
      • _backRefs

        protected final Map<String,SettableBeanProperty> _backRefs
        We may also have one or more back reference fields (usually zero or one).
      • _subDeserializers

        protected transient HashMap<ClassKey,JsonDeserializer<Object>> _subDeserializers
        Lazily constructed map used to contain deserializers needed for polymorphic subtypes. Note that this is only needed for polymorphic types, that is, when the actual type is not statically known. For other types this remains null.
      • _unwrappedPropertyHandler

        protected UnwrappedPropertyHandler _unwrappedPropertyHandler
        If one of properties has "unwrapped" value, we need separate helper object
      • _externalTypeIdHandler

        protected ExternalTypeHandler _externalTypeIdHandler
        Handler that we need iff any of properties uses external type id.
      • _objectIdReader

        protected final ObjectIdReader _objectIdReader
        If an Object Id is to be used for value handled by this deserializer, this reader is used for handling.
    • Method Detail

      • unwrappingDeserializer

        public abstract JsonDeserializer<Object> unwrappingDeserializer(NameTransformer unwrapper)
        Description copied from class: JsonDeserializer
        Method that will return deserializer instance that is able to handle "unwrapped" value instances If no unwrapped instance can be constructed, will simply return this object as-is.

        Default implementation just returns 'this' indicating that no unwrapped variant exists

        Overrides:
        unwrappingDeserializer in class JsonDeserializer<Object>
      • asArrayDeserializer

        protected abstract BeanDeserializerBase asArrayDeserializer()
        Fluent factory for creating a variant that can handle POJO output as a JSON Array. Implementations may ignore this request if no such input is possible.
        Since:
        2.1
      • createContextual

        public JsonDeserializer<?> createContextual(DeserializationContext ctxt,
                                           BeanProperty property)
                                             throws JsonMappingException
        Although most of post-processing is done in resolve(), we only get access to referring property's annotations here; and this is needed to support per-property ObjectIds. We will also consider Shape transformations (read from Array) at this point, since it may come from either Class definition or property.
        Specified by:
        createContextual in interface ContextualDeserializer
        Parameters:
        ctxt - Deserialization context to access configuration, additional deserializers that may be needed by this deserializer
        property - Method, field or constructor parameter that represents the property (and is used to assign deserialized value). Should be available; but there may be cases where caller can not provide it and null is passed instead (in which case impls usually pass 'this' deserializer as is)
        Returns:
        Deserializer to use for deserializing values of specified property; may be this instance or a new instance.
        Throws:
        JsonMappingException
      • isCachable

        public boolean isCachable()
        Description copied from class: JsonDeserializer
        Method called to see if deserializer instance is cachable and usable for other properties of same type (type for which instance was created).

        Note that cached instances are still resolved on per-property basis, if instance implements ResolvableDeserializer: cached instance is just as the base. This means that in most cases it is safe to cache instances; however, it only makes sense to cache instances if instantiation is expensive, or if instances are heavy-weight.

        Default implementation returns false, to indicate that no caching is done.

        Overrides:
        isCachable in class JsonDeserializer<Object>
      • handledType

        public Class<?> handledType()
        Description copied from class: JsonDeserializer
        Method for accessing type of values this deserializer produces. Note that this information is not guaranteed to be exact -- it may be a more generic (super-type) -- but it should not be incorrect (return a non-related type).

        Default implementation will return null, which means almost same same as returning Object.class would; that is, that nothing is known about handled type.

        Overrides:
        handledType in class StdDeserializer<Object>
      • getObjectIdReader

        public ObjectIdReader getObjectIdReader()
        Overridden to return true for those instances that are handling value for which Object Identity handling is enabled (either via value type or referring property).
        Overrides:
        getObjectIdReader in class JsonDeserializer<Object>
        Returns:
        ObjectIdReader used for resolving possible Object Identifier value, instead of full value serialization, if deserializer can do that; null if no Object Id is expected.
      • hasProperty

        public boolean hasProperty(String propertyName)
      • hasViews

        public boolean hasViews()
      • getPropertyCount

        public int getPropertyCount()
        Accessor for checking number of deserialized properties.
      • getKnownPropertyNames

        public Collection<Object> getKnownPropertyNames()
        Description copied from class: JsonDeserializer
        Method that will either return null to indicate that type being deserializers has no concept of properties; or a collection of identifiers for which toString will give external property name. This is only to be used for error reporting and diagnostics purposes (most commonly, to accompany "unknown property" exception).
        Overrides:
        getKnownPropertyNames in class JsonDeserializer<Object>
      • properties

        public Iterator<SettableBeanProperty> properties()
        Accessor for iterating over properties this deserializer uses; with the exception that properties passed via Creator methods (specifically, "property-based constructor") are not included, but can be accessed separate by calling creatorProperties()
      • creatorProperties

        public Iterator<SettableBeanProperty> creatorProperties()
        Accessor for finding properties that represents values to pass through property-based creator method (constructor or factory method)
        Since:
        2.0
      • findProperty

        public SettableBeanProperty findProperty(String propertyName)
        Accessor for finding the property with given name, if POJO has one. Name used is the external name, i.e. name used in external data representation (JSON).
        Since:
        2.0
      • findProperty

        public SettableBeanProperty findProperty(int propertyIndex)
        Alternate find method that tries to locate a property with given property index. Note that access by index is not necessarily faster than by name, since properties are not directly indexable; however, for most instances difference is not significant as number of properties is low.
        Since:
        2.3
      • replaceProperty

        public void replaceProperty(SettableBeanProperty original,
                           SettableBeanProperty replacement)
        Method that can be used to replace an existing property with a modified one.

        NOTE: only ever use this method if you know what you are doing; incorrect usage can break deserializer.

        Parameters:
        original - Property to replace
        replacement - Property to replace it with
        Since:
        2.1
      • deserializeFromObject

        public abstract Object deserializeFromObject(com.fasterxml.jackson.core.JsonParser jp,
                                   DeserializationContext ctxt)
                                              throws IOException,
                                                     com.fasterxml.jackson.core.JsonProcessingException
        General version used when handling needs more advanced features.
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • deserializeWithType

        public Object deserializeWithType(com.fasterxml.jackson.core.JsonParser jp,
                                 DeserializationContext ctxt,
                                 TypeDeserializer typeDeserializer)
                                   throws IOException,
                                          com.fasterxml.jackson.core.JsonProcessingException
        Description copied from class: StdDeserializer
        Base implementation that does not assume specific type inclusion mechanism. Sub-classes are expected to override this method if they are to handle type information.
        Overrides:
        deserializeWithType in class StdDeserializer<Object>
        typeDeserializer - Deserializer to use for handling type information
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • _handleTypedObjectId

        protected Object _handleTypedObjectId(com.fasterxml.jackson.core.JsonParser jp,
                                  DeserializationContext ctxt,
                                  Object pojo,
                                  Object rawId)
                                       throws IOException,
                                              com.fasterxml.jackson.core.JsonProcessingException
        Offlined method called to handle "native" Object Id that has been read and known to be associated with given deserialized POJO.
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
        Since:
        2.3
      • _convertObjectId

        protected Object _convertObjectId(com.fasterxml.jackson.core.JsonParser jp,
                              DeserializationContext ctxt,
                              Object rawId,
                              JsonDeserializer<Object> idDeser)
                                   throws IOException,
                                          com.fasterxml.jackson.core.JsonProcessingException
        Helper method we need to do necessary conversion from whatever native object id type is, into declared type that Jackson internals expect. This may be simple cast (for String ids), or something more complicated; in latter case we may need to create bogus content buffer to allow use of id deserializer.
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
        Since:
        2.3
      • deserializeWithObjectId

        protected Object deserializeWithObjectId(com.fasterxml.jackson.core.JsonParser jp,
                                     DeserializationContext ctxt)
                                          throws IOException,
                                                 com.fasterxml.jackson.core.JsonProcessingException
        Alternative deserialization method used when we expect to see Object Id; if so, we will need to ensure that the Id is seen before anything else, to ensure that it is available for solving references, even if JSON itself is not ordered that way. This may require buffering in some cases, but usually just a simple lookup to ensure that ordering is correct.
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • deserializeFromObjectId

        protected Object deserializeFromObjectId(com.fasterxml.jackson.core.JsonParser jp,
                                     DeserializationContext ctxt)
                                          throws IOException,
                                                 com.fasterxml.jackson.core.JsonProcessingException
        Method called in cases where it looks like we got an Object Id to parse and use as a reference.
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • deserializeFromObjectUsingNonDefault

        protected Object deserializeFromObjectUsingNonDefault(com.fasterxml.jackson.core.JsonParser jp,
                                                  DeserializationContext ctxt)
                                                       throws IOException,
                                                              com.fasterxml.jackson.core.JsonProcessingException
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • _deserializeUsingPropertyBased

        protected abstract Object _deserializeUsingPropertyBased(com.fasterxml.jackson.core.JsonParser jp,
                                            DeserializationContext ctxt)
                                                          throws IOException,
                                                                 com.fasterxml.jackson.core.JsonProcessingException
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • deserializeFromNumber

        public Object deserializeFromNumber(com.fasterxml.jackson.core.JsonParser jp,
                                   DeserializationContext ctxt)
                                     throws IOException,
                                            com.fasterxml.jackson.core.JsonProcessingException
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • deserializeFromString

        public Object deserializeFromString(com.fasterxml.jackson.core.JsonParser jp,
                                   DeserializationContext ctxt)
                                     throws IOException,
                                            com.fasterxml.jackson.core.JsonProcessingException
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • deserializeFromDouble

        public Object deserializeFromDouble(com.fasterxml.jackson.core.JsonParser jp,
                                   DeserializationContext ctxt)
                                     throws IOException,
                                            com.fasterxml.jackson.core.JsonProcessingException
        Method called to deserialize POJO value from a JSON floating-point number.
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • deserializeFromBoolean

        public Object deserializeFromBoolean(com.fasterxml.jackson.core.JsonParser jp,
                                    DeserializationContext ctxt)
                                      throws IOException,
                                             com.fasterxml.jackson.core.JsonProcessingException
        Method called to deserialize POJO value from a JSON boolean value (true, false)
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • deserializeFromArray

        public Object deserializeFromArray(com.fasterxml.jackson.core.JsonParser jp,
                                  DeserializationContext ctxt)
                                    throws IOException,
                                           com.fasterxml.jackson.core.JsonProcessingException
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • handleUnknownProperties

        protected Object handleUnknownProperties(DeserializationContext ctxt,
                                     Object bean,
                                     TokenBuffer unknownTokens)
                                          throws IOException,
                                                 com.fasterxml.jackson.core.JsonProcessingException
        Method called to handle set of one or more unknown properties, stored in their entirety in given TokenBuffer (as field entries, name and value).
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • handleUnknownVanilla

        protected void handleUnknownVanilla(com.fasterxml.jackson.core.JsonParser jp,
                                DeserializationContext ctxt,
                                Object bean,
                                String propName)
                                     throws IOException,
                                            com.fasterxml.jackson.core.JsonProcessingException
        Helper method called for an unknown property, when using "vanilla" processing.
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • handleUnknownProperty

        protected void handleUnknownProperty(com.fasterxml.jackson.core.JsonParser jp,
                                 DeserializationContext ctxt,
                                 Object beanOrClass,
                                 String propName)
                                      throws IOException,
                                             com.fasterxml.jackson.core.JsonProcessingException
        Method called when a JSON property is encountered that has not matching setter, any-setter or field, and thus can not be assigned.
        Overrides:
        handleUnknownProperty in class StdDeserializer<Object>
        Parameters:
        jp - Parser that points to value of the unknown property
        ctxt - Context for deserialization; allows access to the parser, error reporting functionality
        beanOrClass - Instance that is being populated by this deserializer, or if not known, Class that would be instantiated. If null, will assume type is what StdDeserializer.getValueClass() returns.
        propName - Name of the property that can not be mapped
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • handleIgnoredProperty

        protected void handleIgnoredProperty(com.fasterxml.jackson.core.JsonParser jp,
                                 DeserializationContext ctxt,
                                 Object beanOrClass,
                                 String propName)
                                      throws IOException,
                                             com.fasterxml.jackson.core.JsonProcessingException
        Method called when an explicitly ignored property (one specified with a name to match, either by property annotation or class annotation) is encountered.
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
        Since:
        2.3
      • handlePolymorphic

        protected Object handlePolymorphic(com.fasterxml.jackson.core.JsonParser jp,
                               DeserializationContext ctxt,
                               Object bean,
                               TokenBuffer unknownTokens)
                                    throws IOException,
                                           com.fasterxml.jackson.core.JsonProcessingException
        Method called in cases where we may have polymorphic deserialization case: that is, type of Creator-constructed bean is not the type of deserializer itself. It should be a sub-class or implementation class; either way, we may have more specific deserializer to use for handling it.
        Parameters:
        jp - (optional) If not null, parser that has more properties to handle (in addition to buffered properties); if null, all properties are passed in buffer
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • _findSubclassDeserializer

        protected JsonDeserializer<Object> _findSubclassDeserializer(DeserializationContext ctxt,
                                                         Object bean,
                                                         TokenBuffer unknownTokens)
                                                              throws IOException,
                                                                     com.fasterxml.jackson.core.JsonProcessingException
        Helper method called to (try to) locate deserializer for given sub-type of type that this deserializer handles.
        Throws:
        IOException
        com.fasterxml.jackson.core.JsonProcessingException
      • wrapAndThrow

        public void wrapAndThrow(Throwable t,
                        Object bean,
                        String fieldName,
                        DeserializationContext ctxt)
                          throws IOException
        Method that will modify caught exception (passed in as argument) as necessary to include reference information, and to ensure it is a subtype of IOException, or an unchecked exception.

        Rules for wrapping and unwrapping are bit complicated; essentially:

        • Errors are to be passed as is (if uncovered via unwrapping)
        • "Plain" IOExceptions (ones that are not of type JsonMappingException are to be passed as is

        Throws:
        IOException

Copyright © 2014 FasterXML. All Rights Reserved.