RenderingEngine does not restore aggregation state when throwing RenderException
--------------------------------------------------------------------------------
Key: MAGNOLIA-3687
URL: http://jira.magnolia-cms.com/browse/MAGNOLIA-3687
Project: Magnolia
Issue Type: Bug
Components: templating
Affects Versions: 4.4.3
Reporter: Tobias Mattsson
Assignee: Philipp Bärfuss
Priority: Major
In DefaultRenderingEngine.java there's a number of situations that can cause a
RenderException to be thrown. At the start of the method the AggregationState
is updated to reflect the renderable that is to be rendered. This is not reset
when an exception is thrown.
Proposed solution:
{code}
protected void render(Content content, String definitionName, RenderingHelper
helper, Writer out) throws RenderException {
Content orgMainContent = null;
Content orgCurrentContent = null;
AggregationState state = getAggregationStateSafely();
if (state != null) {
orgMainContent = state.getMainContent();
orgCurrentContent = state.getCurrentContent();
state.setCurrentContent(content);
// if not yet set the passed content is the entry point of the rendering
if (orgMainContent == null) {
state.setMainContent(content);
}
}
try {
RenderableDefinition definition = helper.getDefinition(definitionName);
if (definition == null) {
throw new RenderException("Can't find renderable definition " +
definitionName + " for content: " + content.getHandle());
}
Object renderer = helper.getRenderer(definition);
if (renderer == null) {
throw new RenderException("Can't find renderer for type " +
definition.getType() + " of content: " + content.getHandle());
}
helper.render(content, definition, renderer, out);
}
catch (IOException e) {
throw new RenderException("Can't render " + content.getHandle(), e);
} finally {
if (state != null) {
state.setMainContent(orgMainContent);
state.setCurrentContent(orgCurrentContent);
}
}
}
{code}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.magnolia-cms.com/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
----------------------------------------------------------------
For list details see
http://www.magnolia-cms.com/home/community/mailing-lists.html
To unsubscribe, E-mail to: <[email protected]>
----------------------------------------------------------------