Change By: Vivian Steller (17/May/13 11:11 AM)
Description: Magnolia allows to nest areas within areas, since  {{  AreaDefinition }}  extends  {{  TemplateDefinition }} . Regular rendering of these nested areas works just fine using  {{  [@cms.area/] }}  within the template script of the surrounding area.

However, when trying to configure inheritance for such nested areas (see attached screenshot), Magnolia throws an exception during rendering:
{code}
...
[INFO] [talledLocalContainer] Caused by: freemarker.template.TemplateException: info.magnolia.rendering.engine.RenderException: Can't render area node /de/unternehmen/footer/footerLinks with name footerLinks
[INFO] [talledLocalContainer]  at info.magnolia.templating.freemarker.AbstractDirective.execute(AbstractDirective.java:101)
[INFO] [talledLocalContainer]  at freemarker.core.Environment.visit(Environment.java:274)
[INFO] [talledLocalContainer]  at freemarker.core.UnifiedCall.accept(UnifiedCall.java:126)
[INFO] [talledLocalContainer]  at freemarker.core.Environment.visit(Environment.java:221)
[INFO] [talledLocalContainer]  at freemarker.core.MixedContent.accept(MixedContent.java:92)
[INFO] [talledLocalContainer]  at freemarker.core.Environment.visit(Environment.java:221)
[INFO] [talledLocalContainer]  at freemarker.core.Environment.process(Environment.java:199)
[INFO] [talledLocalContainer]  at freemarker.template.Template.process(Template.java:237)
[INFO] [talledLocalContainer]  at info.magnolia.freemarker.FreemarkerHelper.render(FreemarkerHelper.java:155)
[INFO] [talledLocalContainer]  at info.magnolia.rendering.renderer.FreemarkerRenderer.onRender(FreemarkerRenderer.java:85)
[INFO] [talledLocalContainer]  ... 127 more
[INFO] [talledLocalContainer] Caused by: info.magnolia.rendering.engine.RenderException: Can't render area node /de/unternehmen/footer/footerLinks with name footerLinks
[INFO] [talledLocalContainer]  at info.magnolia.templating.elements.AreaElement.end(AreaElement.java:325)
[INFO] [talledLocalContainer]  at info.magnolia.templating.freemarker.AbstractDirective.execute(AbstractDirective.java:98)
[INFO] [talledLocalContainer]  ... 136 more
[INFO] [talledLocalContainer] Caused by: java.lang.IllegalArgumentException: node /de/footer/footerLinks/0 is already wrapped by info.magnolia.jcr.inheritance.InheritanceContentDecorator$OtherNodeInheritanceNodeWrapper and double wrapping is not supported.
[INFO] [talledLocalContainer]  at info.magnolia.jcr.wrapper.DelegateNodeWrapper.setWrappedNode(DelegateNodeWrapper.java:96)
[INFO] [talledLocalContainer]  at info.magnolia.jcr.wrapper.DelegateNodeWrapper.<init>(DelegateNodeWrapper.java:87)
[INFO] [talledLocalContainer]  at info.magnolia.jcr.decoration.ContentDecoratorNodeWrapper.<init>(ContentDecoratorNodeWrapper.java:71)
[INFO] [talledLocalContainer]  at info.magnolia.jcr.inheritance.InheritanceContentDecorator$OtherNodeInheritanceNodeWrapper.<init>(InheritanceContentDecorator.java:225)
[INFO] [talledLocalContainer]  at info.magnolia.jcr.inheritance.InheritanceContentDecorator.wrapNode(InheritanceContentDecorator.java:101)
[INFO] [talledLocalContainer]  at info.magnolia.jcr.decoration.ContentDecoratorNodeIterator.wrapNode(ContentDecoratorNodeIterator.java:71)
[INFO] [talledLocalContainer]  at info.magnolia.jcr.decoration.ContentDecoratorNodeIterator.nextNode(ContentDecoratorNodeIterator.java:62)
[INFO] [talledLocalContainer]  at org.apache.jackrabbit.commons.iterator.FilteringNodeIterator.seekNext(FilteringNodeIterator.java:113)
[INFO] [talledLocalContainer]  at org.apache.jackrabbit.commons.iterator.FilteringNodeIterator.<init>(FilteringNodeIterator.java:42)
[INFO] [talledLocalContainer]  at info.magnolia.jcr.util.NodeUtil.getNodes(NodeUtil.java:604)
[INFO] [talledLocalContainer]  at info.magnolia.jcr.util.NodeUtil.getNodes(NodeUtil.java:612)
[INFO] [talledLocalContainer]  at info.magnolia.templating.elements.AreaElement.end(AreaElement.java:258)
[INFO] [talledLocalContainer]  ... 137 more
{code}

The issue is that Magnolia tries to double-wrap the inherited nodes.

One can work-around this issue by modifying the freemarker/model code:
{code}
[@cms.area name="footerLinks" content=model.unwrap(content.footerLinks)/]
{code}

{{model.unwrap}} simply does:
{code}
    public ContentMap unwrap(ContentMap wrappedContent) throws RepositoryException {
        return new ContentMap(NodeUtil.unwrap(wrappedContent.getJCRNode()));
    }
{code}

A cleaner solution/the fix should however, not simply unwrap the node but rather should not wrap the node again. Hence, {{info.magnolia.jcr.inheritance.InheritanceContentDecorator.wrapNode(Node)}} should check whether the node is already wrapped.
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira



----------------------------------------------------------------
For list details, see: http://www.magnolia-cms.com/community/mailing-lists.html
Alternatively, use our forums: http://forum.magnolia-cms.com/
To unsubscribe, E-mail to: <[email protected]>
----------------------------------------------------------------

Reply via email to