@Override public void render(Node content, RenderableDefinition definition, Map<String, Object> contextObjects, OutputProvider out) throws RenderException { RenderableDefinition variation = variationResolver.resolveVariation(definition); definition = variation != null ? variation : definition; final Renderer renderer = getRendererFor(definition); final RenderingContext renderingContext = getRenderingContext(); renderingContext.push(content, definition, out); try { Collection<RenderingListenerReturnCode> listenerResults = renderingContext.before(content, definition, contextObjects, out); if (listenerResults.contains(RenderingListenerReturnCode.SKIP) || listenerResults.contains(RenderingListenerReturnCode.STOP)) { return; } renderer.render(renderingContext, contextObjects); } catch (RenderException e) { renderingContext.handleException(e); } finally { renderingContext.after(content, definition, contextObjects, out); renderingContext.pop(); } }