org.codehaus.jackson.map.InjectableValues Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ehcache Show documentation
Show all versions of ehcache Show documentation
Ehcache is an open source, standards-based cache used to boost performance,
offload the database and simplify scalability. Ehcache is robust, proven and full-featured and
this has made it the most widely-used Java-based cache.
package org.codehaus.jackson.map;
import java.util.*;
/**
* Abstract class that defines API for objects that provide value to
* "inject" during deserialization. An instance of this object
*
* @since 1.9
*/
public abstract class InjectableValues
{
/**
* Method called to find value identified by id valueId
to
* inject as value of specified property during deserialization, passing
* POJO instance in which value will be injected if it is available
* (will be available when injected via field or setter; not available
* when injected via constructor or factory method argument).
*
* @param valueId Object that identifies value to inject; may be a simple
* name or more complex identifier object, whatever provider needs
* @param ctxt Deserialization context
* @param forProperty Bean property in which value is to be injected
* @param beanInstance Bean instance that contains property to inject,
* if available; null if bean has not yet been constructed.
*/
public abstract Object findInjectableValue(Object valueId,
DeserializationContext ctxt, BeanProperty forProperty,
Object beanInstance);
/*
/**********************************************************
/* Standard implementation
/**********************************************************
*/
/**
* Simple standard implementation which uses a simple Map to
* store values to inject, identified by simple String keys.
*/
public static class Std
extends InjectableValues
{
protected final Map _values;
public Std() {
this(new HashMap());
}
public Std(Map values) {
_values = values;
}
public Std addValue(String key, Object value)
{
_values.put(key, value);
return this;
}
public Std addValue(Class> classKey, Object value)
{
_values.put(classKey.getName(), value);
return this;
}
@Override
public Object findInjectableValue(Object valueId,
DeserializationContext ctxt, BeanProperty forProperty,
Object beanInstance)
{
if (!(valueId instanceof String)) {
String type = (valueId == null) ? "[null]" : valueId.getClass().getName();
throw new IllegalArgumentException("Unrecognized inject value id type ("+type+"), expecting String");
}
String key = (String) valueId;
Object ob = _values.get(key);
if (ob == null && !_values.containsKey(key)) {
throw new IllegalArgumentException("No injectable id with value '"+key+"' found (for property '"
+forProperty.getName()+"')");
}
return ob;
}
}
}