Inclusion of content fragment path along with model json

Avatar

Avatar

thatsmeadarsh

Avatar

thatsmeadarsh

thatsmeadarsh

08-03-2021

Hi All,

As of now AEM OOB model.json expose content fragment elements but not the fragment path. We have a requirement to expose the fragment path along with the model.json as part of our headless CMS requirement. I found that the Exporter contains the fragmentPath variable but not getter for that.

aem-core-wcm-components/ContentFragmentImpl.java at master · adobe/aem-core-wcm-components · GitHub

As this is inside internal package structure no idea on how to override this. What would be the solution to achieve the additional fragmentPath property?

 

Thanks

Headless CMS

Accepted Solutions (1)

Accepted Solutions (1)

Avatar

Avatar

SureshDhulipudi

MVP

Avatar

SureshDhulipudi

MVP

SureshDhulipudi
MVP

08-03-2021

You can extend any core component or customize functionality.

Try like this: 

Step 1: Create an Interface to extend ContentFragment class and add a method to return path

Step 2: Implement the class , use Delegation

 

==== Declare an Interface to ContentFragment Extention Class =========


import com.adobe.cq.wcm.core.components.internal.models.v1.contentfragment;

/**
* An extension to the AEM Core Component ContentFragment
*/
public interface ContentFragmentExtention extends ContentFragment {

default String contentFragmentPath() {
throw new UnsupportedOperationException();
}

}

 

 

Step2:

 

==== Implementation your interface ContentFragmentExtention / Class =========

/**
* An extension to the AEM Core Component ContentFragment
*/
@Model(
adaptables = SlingHttpServletRequest.class,
adapters = { ContentFragmentExtention.class, ContentFragment.class, ComponentExporter.class },
resourceType = ContentFragmentExtentionImpl.RESOURCE_TYPE
)
@exporter(
name = ExporterConstants.SLING_MODEL_EXPORTER_NAME,
extensions = ExporterConstants.SLING_MODEL_EXTENSION
)
public class ContentFragmentExtentionImpl implements ContentFragmentExtention {

public static final String RESOURCE_TYPE = "<path to your proxy ContentFragment path> /apps/project/proxy/componetns/contentfragment";

@Self @Via(type = ResourceSuperType.class)
@Delegate(excludes = DelegationExclusion.class)
private ContentFragment contentFragment;


@ValueMapValue
private String contentFragmentPath; // This is a new property that we are introducing


/**
* implement your method
*
* @Return <your path>
*/
@Override
public String contentFragmentPath() {
<< Logic to get the path >>
return <Path to contentfragment>; //contentFragmentPath
}


}

Answers (1)

Answers (1)

Avatar

Avatar

Arun_Patidar

MVP

Total Posts

3.1K

Likes

1.2K

Correct Reply

879

Avatar

Arun_Patidar

MVP

Total Posts

3.1K

Likes

1.2K

Correct Reply

879
Arun_Patidar
MVP

08-03-2021

In case if you are looking for a custom solution https://aemlab.blogspot.com/2019/07/get-json-response-of-aem-page.html

Note: I did this as part of PoC, so not a production-ready code.