SettableBeanProperty (Jackson JSON Processor)
Date: 2013-07-14

org.codehaus.jackson.map.deser

## Class SettableBeanProperty

- java.lang.Object
- - org.codehaus.jackson.map.deser.SettableBeanProperty

- All Implemented Interfaces:
    BeanProperty, Named
  Direct Known Subclasses:
    CreatorProperty, SettableBeanProperty.FieldProperty, SettableBeanProperty.InnerClassProperty, SettableBeanProperty.ManagedReferenceProperty, SettableBeanProperty.MethodProperty, SettableBeanProperty.SetterlessProperty

      public abstract class SettableBeanProperty
      extends Object
      implements BeanProperty

  Base class for settable properties of a bean: contains both type and name definitions, and reflection-based set functionality. Concrete sub-classes implement details, so that both field- and setter-backed properties can be handled

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `SettableBeanProperty.FieldProperty` This concrete sub-class implements property that is set directly assigning to a Field.
    `static class` | `SettableBeanProperty.InnerClassProperty` This sub-class is used to handle special case of value being a non-static inner class.
    `static class` | `SettableBeanProperty.ManagedReferenceProperty` Wrapper property that is used to handle managed (forward) properties (see [JACKSON-235] for more information).
    `static class` | `SettableBeanProperty.MethodProperty` This concrete sub-class implements property that is set using regular "setter" method.
    `protected static class` | `SettableBeanProperty.NullProvider` To support [JACKSON-420] we need bit more indirection; this is used to produce artificial failure for primitives that don't accept JSON null as value.
    `static class` | `SettableBeanProperty.SetterlessProperty` This concrete sub-class implements Collection or Map property that is indirectly by getting the property value and directly modifying it.

    - ### Nested classes/interfaces inherited from interface org.codehaus.jackson.map.BeanProperty

      `BeanProperty.Std`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected Annotations` | `_contextAnnotations` Class that contains this property (either class that declares the property or one of its subclasses), class that is deserialized using deserializer that contains this property.
    `protected String` | `_managedReferenceName` If property represents a managed (forward) reference (see [JACKSON-235]), we will need name of reference for later linking.
    `protected SettableBeanProperty.NullProvider` | `_nullProvider` Object used to figure out value to be used when 'null' literal is encountered in JSON.
    `protected int` | `_propertyIndex` Index of property (within all property of a bean); assigned when all properties have been collected.
    `protected String` | `_propName` Logical name of the property (often but not always derived from the setter method name)
    `protected JavaType` | `_type` Base type for property; may be a supertype of actual value.
    `protected JsonDeserializer<Object>` | `_valueDeserializer` Deserializer used for handling property value.
    `protected TypeDeserializer` | `_valueTypeDeserializer` If value will contain type information (to support polymorphic handling), this is the type deserializer used to handle type resolution.

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `SettableBeanProperty(SettableBeanProperty src)` Basic copy-constructor for sub-classes to use.
    `protected` | `SettableBeanProperty(SettableBeanProperty src, JsonDeserializer<Object> deser)` Copy-with-deserializer-change constructor for sub-classes to use.
    `protected` | `SettableBeanProperty(String propName, JavaType type, TypeDeserializer typeDeser, Annotations contextAnnotations)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected IOException` | `_throwAsIOE(Exception e)`
    `protected void` | `_throwAsIOE(Exception e, Object value)` Method that takes in exception of any type, and casts or wraps it to an IOException or its subclass.
    `void` | `assignIndex(int index)` Method used to assign index for property.
    `Object` | `deserialize(JsonParser jp, DeserializationContext ctxt)` This method is needed by some specialized bean deserializers, and also called by some `deserializeAndSet(org.codehaus.jackson.JsonParser, org.codehaus.jackson.map.DeserializationContext, java.lang.Object)` implementations.
    `abstract void` | `deserializeAndSet(JsonParser jp, DeserializationContext ctxt, Object instance)` Method called to deserialize appropriate value, given parser (and context), and set it using appropriate mechanism.
    `abstract <A extends Annotation> A` | `getAnnotation(Class<A> acls)` Method for finding annotation associated with this property; meaning annotation associated with one of entities used to access property.
    `<A extends Annotation> A` | `getContextAnnotation(Class<A> acls)` Method for finding annotation associated with context of this property; usually class in which member is declared (or its subtype if processing subtype).
    `protected Class<?>` | `getDeclaringClass()`
    `Object` | `getInjectableValueId()` Accessor for id of injectable value, if this bean property supports value injection.
    `String` | `getManagedReferenceName()`
    `abstract AnnotatedMember` | `getMember()` Method for accessing primary physical entity that represents the property; annotated field, method or constructor property.
    `String` | `getName()` Method to get logical name of the property
    `int` | `getPropertyIndex()` Method for accessing unique index of this property; indexes are assigned once all properties of a `BeanDeserializer` have been collected.
    `String` | `getPropertyName()` Deprecated. Since 1.7, use `getName()` instead.
    `int` | `getProperytIndex()` Deprecated. Since 1.9: use `getPropertyIndex()` instead
    `JavaType` | `getType()` Method to get declared type of the property.
    `JsonDeserializer<Object>` | `getValueDeserializer()`
    `TypeDeserializer` | `getValueTypeDeserializer()`
    `boolean` | `hasValueDeserializer()`
    `boolean` | `hasValueTypeDeserializer()`
    `abstract void` | `set(Object instance, Object value)`
    `void` | `setManagedReferenceName(String n)`
    `void` | `setValueDeserializer(JsonDeserializer<Object> deser)` Deprecated.
    `String` | `toString()`
    `abstract SettableBeanProperty` | `withValueDeserializer(JsonDeserializer<Object> deser)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### _propName

          protected final String _propName

      Logical name of the property (often but not always derived from the setter method name)

    - #### _type

          protected final JavaType _type

      Base type for property; may be a supertype of actual value.

    - #### _contextAnnotations

          protected final Annotations _contextAnnotations

      Class that contains this property (either class that declares the property or one of its subclasses), class that is deserialized using deserializer that contains this property.

    - #### _valueDeserializer

          protected JsonDeserializer<Object> _valueDeserializer

      Deserializer used for handling property value.

    - #### _valueTypeDeserializer

          protected TypeDeserializer _valueTypeDeserializer

      If value will contain type information (to support polymorphic handling), this is the type deserializer used to handle type resolution.

    - #### _nullProvider

          protected SettableBeanProperty.NullProvider _nullProvider

      Object used to figure out value to be used when 'null' literal is encountered in JSON. For most types simply Java null, but for primitive types must be a non-null value (like Integer.valueOf(0) for int).
      Since:
        1.7

    - #### _managedReferenceName

          protected String _managedReferenceName

      If property represents a managed (forward) reference (see [JACKSON-235]), we will need name of reference for later linking.

    - #### _propertyIndex

          protected int _propertyIndex

      Index of property (within all property of a bean); assigned when all properties have been collected. Order of entries is arbitrary, but once indexes are assigned they are not changed.
      Since:
        1.7

  - ### Constructor Detail

    - #### SettableBeanProperty

          protected SettableBeanProperty(String propName,
                              JavaType type,
                              TypeDeserializer typeDeser,
                              Annotations contextAnnotations)

    - #### SettableBeanProperty

          protected SettableBeanProperty(SettableBeanProperty src)

      Basic copy-constructor for sub-classes to use.
      Since:
        1.9

    - #### SettableBeanProperty

          protected SettableBeanProperty(SettableBeanProperty src,
                              JsonDeserializer<Object> deser)

      Copy-with-deserializer-change constructor for sub-classes to use.
      Since:
        1.9

  - ### Method Detail

    - #### setValueDeserializer

          @Deprecated
          public void setValueDeserializer(JsonDeserializer<Object> deser)

      Deprecated.

    - #### withValueDeserializer

          public abstract SettableBeanProperty withValueDeserializer(JsonDeserializer<Object> deser)

      Since:
        1.9

    - #### setManagedReferenceName

          public void setManagedReferenceName(String n)

    - #### assignIndex

          public void assignIndex(int index)

      Method used to assign index for property.
      Since:
        1.7

    - #### getName

          public final String getName()

      Description copied from interface: `BeanProperty`
      Method to get logical name of the property
      Specified by:
        `getName` in interface `BeanProperty`
      Specified by:
        `getName` in interface `Named`

    - #### getType

          public JavaType getType()

      Description copied from interface: `BeanProperty`
      Method to get declared type of the property.
      Specified by:
        `getType` in interface `BeanProperty`

    - #### getAnnotation

          public abstract <A extends Annotation> A getAnnotation(Class<A> acls)

      Description copied from interface: `BeanProperty`
      Method for finding annotation associated with this property; meaning annotation associated with one of entities used to access property.
      Specified by:
        `getAnnotation` in interface `BeanProperty`

    - #### getMember

          public abstract AnnotatedMember getMember()

      Description copied from interface: `BeanProperty`
      Method for accessing primary physical entity that represents the property; annotated field, method or constructor property.
      Specified by:
        `getMember` in interface `BeanProperty`

    - #### getContextAnnotation

          public <A extends Annotation> A getContextAnnotation(Class<A> acls)

      Description copied from interface: `BeanProperty`
      Method for finding annotation associated with context of this property; usually class in which member is declared (or its subtype if processing subtype).
      Specified by:
        `getContextAnnotation` in interface `BeanProperty`

    - #### getDeclaringClass

          protected final Class<?> getDeclaringClass()

    - #### getPropertyName

          @Deprecated
          public String getPropertyName()

      Deprecated. Since 1.7, use `getName()` instead.

    - #### getManagedReferenceName

          public String getManagedReferenceName()

    - #### hasValueDeserializer

          public boolean hasValueDeserializer()

    - #### hasValueTypeDeserializer

          public boolean hasValueTypeDeserializer()

      Since:
        1.9

    - #### getValueDeserializer

          public JsonDeserializer<Object> getValueDeserializer()

      Since:
        1.9

    - #### getValueTypeDeserializer

          public TypeDeserializer getValueTypeDeserializer()

      Since:
        1.9

    - #### getPropertyIndex

          public int getPropertyIndex()

      Method for accessing unique index of this property; indexes are assigned once all properties of a `BeanDeserializer` have been collected.
      Returns:
        Index of this property
      Since:
        1.7 Although note that it was misspelled as "getProperytIndex"; fixed in 1.9

    - #### getProperytIndex

          @Deprecated
          public int getProperytIndex()

      Deprecated. Since 1.9: use `getPropertyIndex()` instead

    - #### getInjectableValueId

          public Object getInjectableValueId()

      Accessor for id of injectable value, if this bean property supports value injection.
      Since:
        1.9

    - #### deserializeAndSet

          public abstract void deserializeAndSet(JsonParser jp,
                               DeserializationContext ctxt,
                               Object instance)
                                          throws IOException,
                                                 JsonProcessingException

      Method called to deserialize appropriate value, given parser (and context), and set it using appropriate mechanism. Pre-condition is that passed parser must point to the first token that should be consumed to produce the value (the only value for scalars, multiple for Objects and Arrays).
      Throws:
        `IOException`
        `JsonProcessingException`

    - #### set

          public abstract void set(Object instance,
                 Object value)
                            throws IOException

      Throws:
        `IOException`

    - #### deserialize

          public final Object deserialize(JsonParser jp,
                           DeserializationContext ctxt)
                                   throws IOException,
                                          JsonProcessingException

      This method is needed by some specialized bean deserializers, and also called by some `deserializeAndSet(org.codehaus.jackson.JsonParser, org.codehaus.jackson.map.DeserializationContext, java.lang.Object)` implementations.

      Pre-condition is that passed parser must point to the first token that should be consumed to produce the value (the only value for scalars, multiple for Objects and Arrays).

      Throws:
        `IOException`
        `JsonProcessingException`

    - #### _throwAsIOE

          protected void _throwAsIOE(Exception e,
                         Object value)
                              throws IOException

      Method that takes in exception of any type, and casts or wraps it to an IOException or its subclass.
      Throws:
        `IOException`

    - #### _throwAsIOE

          protected IOException _throwAsIOE(Exception e)
                                     throws IOException

      Throws:
        `IOException`

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`