package com.netflix.governator.configuration; import java.io.IOException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; /** * Implements the deserialization part of {@link ConfigurationProvider} to simplify implementations. * * Created by jad.naous on 4/2/14. */ public abstract class AbstractObjectConfigurationProvider extends DefaultConfigurationProvider { private final Logger logger; private final ObjectMapper mapper; protected AbstractObjectConfigurationProvider() { this(null); } protected AbstractObjectConfigurationProvider(ObjectMapper mapper) { if (mapper == null) { this.mapper = new ObjectMapper(); } else { this.mapper = mapper; } this.logger = LoggerFactory.getLogger(getClass()); } @Override public <T> Property<T> getObjectProperty(final ConfigurationKey key, final T defaultValue, final Class<T> objectType) { return new Property<T>() { @Override public T get() { String serialized = getStringSupplier(key, null).get(); if (serialized == null || serialized.length() == 0) { return defaultValue; } try { return mapper.readValue(serialized, objectType); } catch (IOException e) { logger.warn("Could not deserialize configuration with key " + key.getRawKey() + " to type " + objectType, e); return defaultValue; } } }; } }