}
private <T extends Configuration> T build(Class<T> configurationClass, ObjectNode node) throws IOException, ConfigurationException {
// TODO: property overrides
// TODO: environment overrides
T configuration = objectMapper.readValue(new TreeTraversingParser(node), configurationClass);
if (validator != null) {
Set<ConstraintViolation<T>> violations = validator.validate(configuration);
if (!violations.isEmpty()) {
throw new ConfigurationException("Configuration failed validation: " + violations.toString());
}