use of org.craftercms.core.exception.TemplateException in project core by craftercms.
the class FreeMarkerStringTemplateCompiler method compile.
public CompiledTemplate compile(IdentifiableStringTemplateSource templateSource) throws TemplateException {
// Replace '/' with any other char because Freemarker messes up IDs with '/' because it thinks they're paths.
String id = templateSource.getId().replace('/', ';');
String source = templateSource.getSource();
StringTemplateSource currentTemplateSource = (StringTemplateSource) templateLoader.findTemplateSource(id);
if (currentTemplateSource == null || !currentTemplateSource.getSource().equals(source)) {
templateLoader.putTemplateSource(id, source);
}
try {
return new FreeMarkerCompiledTemplate(templateConfiguration.getTemplate(id));
} catch (Exception e) {
throw new TemplateException("Unable to compile Freemarker template:\n" + source, e);
}
}
use of org.craftercms.core.exception.TemplateException in project core by craftercms.
the class SpELStringTemplateCompiler method compile.
@Override
public CompiledTemplate compile(IdentifiableStringTemplateSource templateSource) throws TemplateException {
String id = templateSource.getId();
String source = templateSource.getSource();
try {
Expression expression = expressionCache.get(id);
if (expression == null || !expression.getExpressionString().equals(source)) {
expression = parser.parseExpression(source, parserContext);
expressionCache.put(id, expression);
}
return new SpElCompiledTemplate(expression, evalContext);
} catch (Exception e) {
throw new TemplateException("Unable to compile SpEL template:\n" + source, e);
}
}
use of org.craftercms.core.exception.TemplateException in project core by craftercms.
the class SpElCompiledTemplate method process.
@Override
public void process(Object model, Writer output) throws TemplateException {
try {
String result = expression.getValue(evaluationContext, model, String.class);
output.write(result);
output.flush();
} catch (IOException e) {
throw new TemplateException("An I/O error occurred while writing to output", e);
} catch (Exception e) {
throw new TemplateException("Unable to process SpEL template:\n" + expression.getExpressionString(), e);
}
}
use of org.craftercms.core.exception.TemplateException in project core by craftercms.
the class TemplateProcessor method process.
/**
* Processes the content of certain nodes (found by the {@code NodeScanner} in the item's descriptor as templates,
* by compiling the node text templates through the {@code templateCompiler} and then processing the compiled
* template with a model returned by {@code modelFactory}.
*
* @throws ItemProcessingException if an error occurred while processing a template
*/
public Item process(Context context, CachingOptions cachingOptions, Item item) throws ItemProcessingException {
String descriptorUrl = item.getDescriptorUrl();
Document descriptorDom = item.getDescriptorDom();
if (descriptorDom != null) {
List<Node> templateNodes = templateNodeScanner.scan(descriptorDom);
if (CollectionUtils.isNotEmpty(templateNodes)) {
for (Node templateNode : templateNodes) {
String templateNodePath = templateNode.getUniquePath();
if (logger.isDebugEnabled()) {
logger.debug("Template found in " + descriptorUrl + " at " + templateNodePath);
}
String templateId = templateNodePath + "@" + descriptorUrl;
String template = templateNode.getText();
IdentifiableStringTemplateSource templateSource = new IdentifiableStringTemplateSource(templateId, template);
Object model = modelFactory.getModel(item, templateNode, template);
StringWriter output = new StringWriter();
try {
CompiledTemplate compiledTemplate = templateCompiler.compile(templateSource);
compiledTemplate.process(model, output);
} catch (TemplateException e) {
throw new ItemProcessingException("Unable to process the template " + templateId, e);
}
templateNode.setText(output.toString());
}
}
}
return item;
}
Aggregations