# Class ELResolver

java.lang.Object
jakarta.el.ELResolver

Direct Known Subclasses:
  `ArrayELResolver, BeanELResolver, BeanNameELResolver, CompositeELResolver, ListELResolver, MapELResolver, OptionalELResolver, RecordELResolver, ResourceBundleELResolver, StaticFieldELResolver, TypeConverter`

public abstract class ELResolver extends Object
Base class for resolvers that resolve property references during EL expression evaluation. An ELResolver is responsible for resolving a property on a base object, determining its type, setting its value, and reporting whether it is read-only. Resolvers are chained together in an `ELContext`, and each resolver in the chain attempts to resolve the property until one succeeds. Implementations include `ListELResolver`, `MapELResolver`, and custom resolvers for application-specific object models.

Since:
  EL 2.1

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ELResolver()`
  Constructs an ELResolver.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `<T> T`
  `convertToType(ELContext context, Object obj, Class<T> type)`
  Converts the given object to the given type.
  `abstract Class<?>`
  `getCommonPropertyType(ELContext context, Object base)`
  Obtain the most common type that is acceptable for the given base object.
  `abstract Class<?>`
  `getType(ELContext context, Object base, Object property)`
  Obtain the most generally acceptable type that may be used to set the given property on the given object using the given context.
  `abstract Object`
  `getValue(ELContext context, Object base, Object property)`
  Obtain the value of the given property on the given object using the given context.
  `Object`
  `invoke(ELContext context, Object base, Object method, Class<?>[] paramTypes, Object[] params)`
  Invokes a method on the given object.
  `abstract boolean`
  `isReadOnly(ELContext context, Object base, Object property)`
  Determine if the given property on the given object is read-only using the given context.
  `abstract void`
  `setValue(ELContext context, Object base, Object property, Object value)`
  Set the value of the given property on the given object using the given context.

  ### Methods inherited from class Object

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

- ## Constructor Details

  - ### ELResolver

    public ELResolver()
    Constructs an ELResolver. Subclasses should invoke this constructor to initialize the base resolver state.

- ## Method Details

  - ### getValue

    public abstract Object getValue(ELContext context, Object base, Object property)
    Obtain the value of the given property on the given object using the given context.
    Parameters:
      `context` - The EL context for this evaluation
      `base` - The base object on which the property is to be found
      `property` - The property whose value is to be returned
    Returns:
      the value of the provided property
    Throws:
      `NullPointerException` - If the supplied context is `null`
      `PropertyNotFoundException` - If the base/property combination provided to the resolver is one that the resolver can handle but no match was found or a match was found but was not readable
      `ELException` - Wraps any exception throw whilst resolving the property

  - ### invoke

    public Object invoke(ELContext context, Object base, Object method, Class<?>[] paramTypes, Object[] params)
    Invokes a method on the given object.
    Parameters:
      `context` - The EL context for this evaluation
      `base` - The base object on which the method is to be found
      `method` - The method to invoke
      `paramTypes` - The types of the parameters of the method to invoke
      `params` - The parameters with which to invoke the method
    Returns:
      This default implementation always returns `null`
    Since:
      EL 2.2

  - ### getType

    public abstract Class<?> getType(ELContext context, Object base, Object property)
    Obtain the most generally acceptable type that may be used to set the given property on the given object using the given context.
    Parameters:
      `context` - The EL context for this evaluation
      `base` - The base object on which the property is to be found
      `property` - The property whose type is to be returned
    Returns:
      the most general type that maybe used to set the provided property or `null` if the resolver is read-only.
    Throws:
      `NullPointerException` - If the supplied context is `null`
      `PropertyNotFoundException` - If the base/property combination provided to the resolver is one that the resolver can handle but no match was found or a match was found but was not readable
      `ELException` - Wraps any exception throw whilst resolving the property

  - ### setValue

    public abstract void setValue(ELContext context, Object base, Object property, Object value)
    Set the value of the given property on the given object using the given context.
    Parameters:
      `context` - The EL context for this evaluation
      `base` - The base object on which the property is to be found
      `property` - The property whose value is to be set
      `value` - The value to set the property to
    Throws:
      `NullPointerException` - If the supplied context is `null`
      `PropertyNotFoundException` - If the base/property combination provided to the resolver is one that the resolver can handle but no match was found
      `PropertyNotWritableException` - If the base/property combination provided to the resolver is one that the resolver can handle but the property was not writable
      `ELException` - Wraps any exception throw whilst resolving the property

  - ### isReadOnly

    public abstract boolean isReadOnly(ELContext context, Object base, Object property)
    Determine if the given property on the given object is read-only using the given context.
    Parameters:
      `context` - The EL context for this evaluation
      `base` - The base object on which the property is to be found
      `property` - The property to be checked for read only status
    Returns:
      `true` if the identified property is read only, otherwise `false`
    Throws:
      `NullPointerException` - If the supplied context is `null`
      `PropertyNotFoundException` - If the base/property combination provided to the resolver is one that the resolver can handle but no match was found
      `ELException` - Wraps any exception throw whilst resolving the property

  - ### getCommonPropertyType

    public abstract Class<?> getCommonPropertyType(ELContext context, Object base)
    Obtain the most common type that is acceptable for the given base object.
    Parameters:
      `context` - The context in which the examination takes place
      `base` - The object to examine
    Returns:
      {code null} if the most common type cannot be determined, otherwise the most common type

  - ### convertToType

    public <T> T convertToType(ELContext context, Object obj, Class<T> type)
    Converts the given object to the given type.
    Type Parameters:
      `T` - The type to which the object should be converted
    Parameters:
      `context` - The EL context for this evaluation
      `obj` - The object to convert
      `type` - The type to which the object should be converted
    Returns:
      This default implementation always returns `null`
    Since:
      EL 3.0