diff --git a/dd-trace/src/main/java/com/datadoghq/trace/resolver/FactoryUtils.java b/dd-trace/src/main/java/com/datadoghq/trace/resolver/FactoryUtils.java new file mode 100644 index 0000000000..88f1e31d4c --- /dev/null +++ b/dd-trace/src/main/java/com/datadoghq/trace/resolver/FactoryUtils.java @@ -0,0 +1,34 @@ +package com.datadoghq.trace.resolver; + +import java.io.IOException; +import java.net.URL; +import java.util.Enumeration; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; + +public class FactoryUtils { + private final static Logger logger = LoggerFactory.getLogger(FactoryUtils.class); + + private static final ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory()); + + public static A loadConfigFromResource(String resourceName, Class targetClass){ + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + A config = null; + try { + Enumeration iter = classLoader.getResources(resourceName); + while (iter.hasMoreElements()) { + config = objectMapper.readValue(iter.nextElement().openStream(), targetClass); + + break; // ONLY the closest resource file is taken into account + } + } catch (IOException e) { + logger.warn("Could not load configuration file {}.", resourceName); + logger.error("Error when loading config file", e); + } + return config; + } +}