[ 
http://jira.magnolia-cms.com/browse/MAGNOLIA-3687?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ondřej Chytil updated MAGNOLIA-3687:
------------------------------------

    Fix Version/s: 4.4.5
                       (was: 4.4.4)

> 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
>             Fix For: 4.4.5
>
>
> 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]>
----------------------------------------------------------------

Reply via email to