in src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java [213:270]
public <T extends Assembler> T getAssembler(Class<T> type, String name)
throws TurbineException
{
String key = type + ":" + name;
T assembler = null;
log.debug("Check name in key {} in assembler.", key);
if (HttpUtils.keyRequiresClean( name ))
{
String message = "Assembler key has invalid characters.";
log.warn("{}. Abort assembling for cleaned key {}:{}.", message, type, HttpUtils.getCleanedKey( name ) );
throw new TurbineException( message );
}
if (isCaching && assemblerCache.containsKey(key))
{
assembler = (T) assemblerCache.get(key);
log.debug("Found {} in the cache!", key);
}
else
{
log.debug("Loading {}", key);
List<AssemblerFactory<T>> facs = getFactoryGroup(type);
for (Iterator<AssemblerFactory<T>> it = facs.iterator(); (assembler == null) && it.hasNext();)
{
AssemblerFactory<T> fac = it.next();
try
{
assembler = fac.getAssembler(name);
}
catch (Exception e)
{
throw new TurbineException("Failed to load an assembler for "
+ name + " from the "
+ type + " factory "
+ fac.getClass().getName(), e);
}
if (assembler != null)
{
AnnotationProcessor.process(assembler);
if (isCaching)
{
T oldAssembler = (T) assemblerCache.putIfAbsent(key, assembler);
if (oldAssembler != null)
{
assembler = oldAssembler;
}
}
}
}
}
return assembler;
}