[ 
https://issues.apache.org/jira/browse/SLING-10738?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17400242#comment-17400242
 ] 

Julian Sedding commented on SLING-10738:
----------------------------------------

[~cshawaus] I would assume that your class needs to implement 
{{ComponentExporter}} and {{ContainerExporter}} as well as {{LayoutContainer}} 
(BTW your current code implements {{LayoutContainer.class}}, that doesn't look 
correct. I assume you mean just {{LayoutContainer}}).

I expect that your error.log file may contain further information about what is 
happening. My guess would be that you find a {{ClassCastException}} due to the 
missing implemented interfaces.

> Sling Model inheritance breaks with component exporter
> ------------------------------------------------------
>
>                 Key: SLING-10738
>                 URL: https://issues.apache.org/jira/browse/SLING-10738
>             Project: Sling
>          Issue Type: Bug
>          Components: Sling Models
>            Reporter: Chris Shaw
>            Priority: Major
>
> Hi,
> I'm currently supporting a project where I need to extend the LayoutContainer 
> class in AEM Core Components. Completing this process was easy and 
> straightforward when solely dealing solely with Sling Model Delegation. 
> Shortly after confirming this behaviour was working correctly, I added 
> Adobe's *ContainerExporter.class* to the *@Model* adapters and noticed thatĀ 
> Sling Model Delegation stopped working.
> I am raising this issue here first because the same method of extending 
> models in AEM Core Components works without issue except for the 
> LayoutContainer model. Below is the basic code before adding the exporters.
> {code:java}
> @Model(
>         adaptables = SlingHttpServletRequest.class,
>         adapters = {LayoutContainer.class},
>         resourceType = CustomContainerImpl.RESOURCE_TYPE,
>         defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL
> )
> public class CustomContainerImpl implements LayoutContainer.class {
>     protected static final String RESOURCE_TYPE = 
> "project/components/custom-container";
>     @Self
>     @Via(type = ResourceSuperType.class)
>     private LayoutContainer layoutContainer;
>     
>     // ... implementation
> }
> {code}
> With this code, no issues at a page level are observed and all inherited 
> behaviours work as expected including appending *.model.json* to the page URL.
> Once I move beyond this and apply the exporter adapters, *.model.json* no 
> longer works correctly andĀ Sling Model Delegation breaks completely.
> {code:java}
> @Model(
>         adaptables = SlingHttpServletRequest.class,
>         adapters = {LayoutContainer.class, ComponentExporter.class, 
> ContainerExporter.class},
>         resourceType = CustomContainerImpl.RESOURCE_TYPE,
>         defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL
> )
> public class CustomContainerImpl implements LayoutContainer.class {
>     protected static final String RESOURCE_TYPE = 
> "project/components/custom-container";
>     @Self
>     @Via(type = ResourceSuperType.class)
>     private LayoutContainer layoutContainer;
>     
>     // ... implementation
> }
> {code}
> Note that the adapters are: *ComponentExporter.class* and 
> *ContainerExporter.class*.
> What can be observed are 2 key issues:
>  # The *layoutContainer* property always returns *null*
>  # The previous JSON structure containing *root* elements is always empty for 
> child pages
> As a workaround to at least ensure the inheritance works, I have reverted to 
> using a *ModelFactory* instance which works from an authoring perspective but 
> doesn't solve the JSON output issue.
> {code:java}
> layoutContainer = modelFactory.getModelFromWrappedRequest(
>     request,
>     request.getResource(),
>     LayoutContainer.class);{code}
> It would be great to get insight into this as I was to be 100% sure Sling is 
> not to blame before raising an issue with Adobe.
> Thanks for your time!



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to