[
https://issues.apache.org/jira/browse/SLING-10738?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17400256#comment-17400256
]
Julian Sedding commented on SLING-10738:
----------------------------------------
Ok, fair enough. Then I don't see an obvious reason why it would fail. If no
one comes up with a good answer, it may help if you can provide a sample
project to replicate the issue. Especially in the absence of log messages (I
assume you tried debug logging?), that could help a lot with the analysis.
> 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 {
> 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 {
> 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)