throws StringSubstitutionException {
if (!isValid(components)) {
throw new StringSubstitutionException(_strings.get("missingComponentIdentifiers"));
}
for (String componentId : components) {
Component component = findComponentById(componentId);
if (component == null) {
_logger.log(Level.INFO, _strings.get("missingComponent", componentId));
continue;
}
doSubstitution(component);