@Override
	public Class<?> getType(ELContext context, Object base, Object property) {
		context.setPropertyResolved(false);
		for (ELResolver resolver : resolvers) {
			Class<?> type = resolver.getType(context, base, property);
			if (context.isPropertyResolved()) {
				return type;
			}
		}
		return null;
	}
@ Override public Class < ? > getType ( ELContext context , Object base , Object property ) { context . setPropertyResolved ( false ) ; for ( ELResolver resolver : resolvers ) { Class < ? > type = resolver . getType ( context , base , property ) ; if ( context . isPropertyResolved ( ) ) { return type ; } } return null ; }
For a given base and property, attempts to identify the most general type that is acceptable
for an object to be passed as the value parameter in a future call to the
{@link #setValue(ELContext, Object, Object, Object)} method. The result is obtained by
querying all component resolvers. If this resolver handles the given (base, property) pair,
the propertyResolved property of the ELContext object must be set to true by the resolver,
before returning. If this property is not true after this method is called, the caller should
ignore the return value. First, propertyResolved is set to false on the provided ELContext.
Next, for each component resolver in this composite:
<ol>
<li>The getType() method is called, passing in the provided context, base and property.</li>
<li>If the ELContext's propertyResolved flag is false then iteration continues.</li>
<li>Otherwise, iteration stops and no more component resolvers are considered. The value
returned by getType() is returned by this method.</li>
</ol>
If none of the component resolvers were able to perform this operation, the value null is
returned and the propertyResolved flag remains set to false. Any exception thrown by
component resolvers during the iteration is propagated to the caller of this method.

@param context
The context of this evaluation.
@param base
The base object to return the most general property type for, or null to enumerate
the set of top-level variables that this resolver can evaluate.
@param property
The property or variable to return the acceptable type for.
@return If the propertyResolved property of ELContext was set to true, then the most general
acceptable type; otherwise undefined.
@throws NullPointerException
if context is null
@throws PropertyNotFoundException
if base is not null and the specified property does not exist or is not readable.
@throws ELException
if an exception was thrown while performing the property or variable resolution.
The thrown exception must be included as the cause property of this exception, if
available.