@Override
	public Object getValue(ELContext context, Object base, Object property) {
		if (context == null) {
			throw new NullPointerException("context is null");
		}
		Object result = null;
		if (isResolvable(base)) {
			JsonNode resultNode = ((JsonNode) base).get(property.toString());
			if (resultNode != null && resultNode.isValueNode()) {
				if (resultNode.isBoolean()) {
					result = resultNode.asBoolean();
				} else if (resultNode.isLong()) {
					result = resultNode.asLong();
				} else if (resultNode.isBigDecimal() || resultNode.isDouble()) {
					result = resultNode.asDouble();
				} else if (resultNode.isTextual()) {
					result = resultNode.asText();
				} else {
					result = resultNode.toString();
				}

			} else {
				if (resultNode.isArray()) {
					result = Context.getProcessEngineConfiguration().getObjectMapper().convertValue(resultNode,
							List.class);
				} else {
					result = resultNode;
				}
			}
			context.setPropertyResolved(true);
		}
		return result;
	}
@ Override public Object getValue ( ELContext context , Object base , Object property ) { if ( context == null ) { throw new NullPointerException ( "context is null" ) ; } Object result = null ; if ( isResolvable ( base ) ) { JsonNode resultNode = ( ( JsonNode ) base ) . get ( property . toString ( ) ) ; if ( resultNode != null && resultNode . isValueNode ( ) ) { if ( resultNode . isBoolean ( ) ) { result = resultNode . asBoolean ( ) ; } else if ( resultNode . isLong ( ) ) { result = resultNode . asLong ( ) ; } else if ( resultNode . isBigDecimal ( ) || resultNode . isDouble ( ) ) { result = resultNode . asDouble ( ) ; } else if ( resultNode . isTextual ( ) ) { result = resultNode . asText ( ) ; } else { result = resultNode . toString ( ) ; } } else { if ( resultNode . isArray ( ) ) { result = Context . getProcessEngineConfiguration ( ) . getObjectMapper ( ) . convertValue ( resultNode , List . class ) ; } else { result = resultNode ; } } context . setPropertyResolved ( true ) ; } return result ; }
If the base object is a map, returns the value associated with the given
key, as specified by the property argument. If the key was not found,
null is returned. If the base is a Map, the propertyResolved property of
the ELContext object must be set to true by this resolver, before
returning. If this property is not true after this method is called, the
caller should ignore the return value. Just as in
java.util.Map.get(Object), just because null is returned doesn't mean
there is no mapping for the key; it's also possible that the Map
explicitly maps the key to null.

@param context
The context of this evaluation.
@param base
The map to analyze. Only bases of type Map are handled by this
resolver.
@param property
The key to return the acceptable type for. Ignored by this
resolver.
@return If the propertyResolved property of ELContext was set to true,
then the value associated with the given key or null if the key
was not found. Otherwise, undefined.
@throws ClassCastException
if the key is of an inappropriate type for this map
(optionally thrown by the underlying Map).
@throws NullPointerException
if context is null, or if the key is null and this map does
not permit null keys (the latter is optionally thrown by the
underlying Map).
@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.