Search in sources :

Example 1 with HandlerInstantiator

use of com.fasterxml.jackson.databind.cfg.HandlerInstantiator in project jackson-databind by FasterXML.

the class DefaultDeserializationContext method keyDeserializerInstance.

@Override
public final KeyDeserializer keyDeserializerInstance(Annotated ann, Object deserDef) throws JsonMappingException {
    if (deserDef == null) {
        return null;
    }
    KeyDeserializer deser;
    if (deserDef instanceof KeyDeserializer) {
        deser = (KeyDeserializer) deserDef;
    } else {
        if (!(deserDef instanceof Class)) {
            throw new IllegalStateException("AnnotationIntrospector returned key deserializer definition of type " + deserDef.getClass().getName() + "; expected type KeyDeserializer or Class<KeyDeserializer> instead");
        }
        Class<?> deserClass = (Class<?>) deserDef;
        // there are some known "no class" markers to consider too:
        if (deserClass == KeyDeserializer.None.class || ClassUtil.isBogusClass(deserClass)) {
            return null;
        }
        if (!KeyDeserializer.class.isAssignableFrom(deserClass)) {
            throw new IllegalStateException("AnnotationIntrospector returned Class " + deserClass.getName() + "; expected Class<KeyDeserializer>");
        }
        HandlerInstantiator hi = _config.getHandlerInstantiator();
        deser = (hi == null) ? null : hi.keyDeserializerInstance(_config, ann, deserClass);
        if (deser == null) {
            deser = (KeyDeserializer) ClassUtil.createInstance(deserClass, _config.canOverrideAccessModifiers());
        }
    }
    // First: need to resolve
    if (deser instanceof ResolvableDeserializer) {
        ((ResolvableDeserializer) deser).resolve(this);
    }
    return deser;
}
Also used : HandlerInstantiator(com.fasterxml.jackson.databind.cfg.HandlerInstantiator)

Example 2 with HandlerInstantiator

use of com.fasterxml.jackson.databind.cfg.HandlerInstantiator in project jackson-databind by FasterXML.

the class BasicDeserializerFactory method _valueInstantiatorInstance.

public ValueInstantiator _valueInstantiatorInstance(DeserializationConfig config, Annotated annotated, Object instDef) throws JsonMappingException {
    if (instDef == null) {
        return null;
    }
    ValueInstantiator inst;
    if (instDef instanceof ValueInstantiator) {
        return (ValueInstantiator) instDef;
    }
    if (!(instDef instanceof Class)) {
        throw new IllegalStateException("AnnotationIntrospector returned key deserializer definition of type " + instDef.getClass().getName() + "; expected type KeyDeserializer or Class<KeyDeserializer> instead");
    }
    Class<?> instClass = (Class<?>) instDef;
    if (ClassUtil.isBogusClass(instClass)) {
        return null;
    }
    if (!ValueInstantiator.class.isAssignableFrom(instClass)) {
        throw new IllegalStateException("AnnotationIntrospector returned Class " + instClass.getName() + "; expected Class<ValueInstantiator>");
    }
    HandlerInstantiator hi = config.getHandlerInstantiator();
    if (hi != null) {
        inst = hi.valueInstantiatorInstance(config, annotated, instClass);
        if (inst != null) {
            return inst;
        }
    }
    return (ValueInstantiator) ClassUtil.createInstance(instClass, config.canOverrideAccessModifiers());
}
Also used : HandlerInstantiator(com.fasterxml.jackson.databind.cfg.HandlerInstantiator)

Example 3 with HandlerInstantiator

use of com.fasterxml.jackson.databind.cfg.HandlerInstantiator in project jackson-databind by FasterXML.

the class JacksonAnnotationIntrospector method _constructVirtualProperty.

protected BeanPropertyWriter _constructVirtualProperty(JsonAppend.Prop prop, MapperConfig<?> config, AnnotatedClass ac) {
    PropertyMetadata metadata = prop.required() ? PropertyMetadata.STD_REQUIRED : PropertyMetadata.STD_OPTIONAL;
    PropertyName propName = _propertyName(prop.name(), prop.namespace());
    JavaType type = config.constructType(prop.type());
    // now, then, we need a placeholder for member (no real Field/Method):
    AnnotatedMember member = new VirtualAnnotatedMember(ac, ac.getRawType(), propName.getSimpleName(), type);
    // and with that and property definition
    SimpleBeanPropertyDefinition propDef = SimpleBeanPropertyDefinition.construct(config, member, propName, metadata, prop.include());
    Class<?> implClass = prop.value();
    HandlerInstantiator hi = config.getHandlerInstantiator();
    VirtualBeanPropertyWriter bpw = (hi == null) ? null : hi.virtualPropertyWriterInstance(config, implClass);
    if (bpw == null) {
        bpw = (VirtualBeanPropertyWriter) ClassUtil.createInstance(implClass, config.canOverrideAccessModifiers());
    }
    // one more thing: give it necessary contextual information
    return bpw.withConfig(config, ac, propDef, type);
}
Also used : HandlerInstantiator(com.fasterxml.jackson.databind.cfg.HandlerInstantiator) VirtualBeanPropertyWriter(com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter)

Example 4 with HandlerInstantiator

use of com.fasterxml.jackson.databind.cfg.HandlerInstantiator in project jackson-databind by FasterXML.

the class POJOPropertiesCollector method _findNamingStrategy.

private PropertyNamingStrategy _findNamingStrategy() {
    Object namingDef = (_annotationIntrospector == null) ? null : _annotationIntrospector.findNamingStrategy(_classDef);
    if (namingDef == null) {
        return _config.getPropertyNamingStrategy();
    }
    if (namingDef instanceof PropertyNamingStrategy) {
        return (PropertyNamingStrategy) namingDef;
    }
    /* Alas, there's no way to force return type of "either class
         * X or Y" -- need to throw an exception after the fact
         */
    if (!(namingDef instanceof Class)) {
        throw new IllegalStateException("AnnotationIntrospector returned PropertyNamingStrategy definition of type " + namingDef.getClass().getName() + "; expected type PropertyNamingStrategy or Class<PropertyNamingStrategy> instead");
    }
    Class<?> namingClass = (Class<?>) namingDef;
    // 09-Nov-2015, tatu: Need to consider pseudo-value of STD, which means "use default"
    if (namingClass == PropertyNamingStrategy.class) {
        return null;
    }
    if (!PropertyNamingStrategy.class.isAssignableFrom(namingClass)) {
        throw new IllegalStateException("AnnotationIntrospector returned Class " + namingClass.getName() + "; expected Class<PropertyNamingStrategy>");
    }
    HandlerInstantiator hi = _config.getHandlerInstantiator();
    if (hi != null) {
        PropertyNamingStrategy pns = hi.namingStrategyInstance(_config, _classDef, namingClass);
        if (pns != null) {
            return pns;
        }
    }
    return (PropertyNamingStrategy) ClassUtil.createInstance(namingClass, _config.canOverrideAccessModifiers());
}
Also used : HandlerInstantiator(com.fasterxml.jackson.databind.cfg.HandlerInstantiator)

Example 5 with HandlerInstantiator

use of com.fasterxml.jackson.databind.cfg.HandlerInstantiator in project jackson-databind by FasterXML.

the class BasicBeanDescription method _createConverter.

/*
    /**********************************************************
    /* Helper methods, other
    /**********************************************************
     */
@SuppressWarnings("unchecked")
protected Converter<Object, Object> _createConverter(Object converterDef) {
    if (converterDef == null) {
        return null;
    }
    if (converterDef instanceof Converter<?, ?>) {
        return (Converter<Object, Object>) converterDef;
    }
    if (!(converterDef instanceof Class)) {
        throw new IllegalStateException("AnnotationIntrospector returned Converter definition of type " + converterDef.getClass().getName() + "; expected type Converter or Class<Converter> instead");
    }
    Class<?> converterClass = (Class<?>) converterDef;
    // there are some known "no class" markers to consider too:
    if (converterClass == Converter.None.class || ClassUtil.isBogusClass(converterClass)) {
        return null;
    }
    if (!Converter.class.isAssignableFrom(converterClass)) {
        throw new IllegalStateException("AnnotationIntrospector returned Class " + converterClass.getName() + "; expected Class<Converter>");
    }
    HandlerInstantiator hi = _config.getHandlerInstantiator();
    Converter<?, ?> conv = (hi == null) ? null : hi.converterInstance(_config, _classInfo, converterClass);
    if (conv == null) {
        conv = (Converter<?, ?>) ClassUtil.createInstance(converterClass, _config.canOverrideAccessModifiers());
    }
    return (Converter<Object, Object>) conv;
}
Also used : HandlerInstantiator(com.fasterxml.jackson.databind.cfg.HandlerInstantiator) Converter(com.fasterxml.jackson.databind.util.Converter)

Aggregations

HandlerInstantiator (com.fasterxml.jackson.databind.cfg.HandlerInstantiator)11 Converter (com.fasterxml.jackson.databind.util.Converter)2 VirtualBeanPropertyWriter (com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter)1