Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn More

View all

Sign in to view all badges

Inclusion of content fragment path along with model json

Avatar

Avatar
Level 1
thatsmeadarsh
Level 1

Likes

0 likes

Total Posts

4 posts

Correct Reply

0 solutions
View profile

Avatar
Level 1
thatsmeadarsh
Level 1

Likes

0 likes

Total Posts

4 posts

Correct Reply

0 solutions
View profile
thatsmeadarsh
Level 1

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
Ignite 1
MVP
SureshDhulipudi
MVP

Likes

163 likes

Total Posts

174 posts

Correct Reply

49 solutions
Top badges earned
Ignite 1
Give Back 5
Give Back 3
Give Back 10
Give Back
View profile

Avatar
Ignite 1
MVP
SureshDhulipudi
MVP

Likes

163 likes

Total Posts

174 posts

Correct Reply

49 solutions
Top badges earned
Ignite 1
Give Back 5
Give Back 3
Give Back 10
Give Back
View profile
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
Coach
MVP
Arun_Patidar
MVP

Likes

1,345 likes

Total Posts

3,220 posts

Correct Reply

914 solutions
Top badges earned
Coach
Contributor 2
Ignite 10
Give Back 700
Boost 1000
View profile

Avatar
Coach
MVP
Arun_Patidar
MVP

Likes

1,345 likes

Total Posts

3,220 posts

Correct Reply

914 solutions
Top badges earned
Coach
Contributor 2
Ignite 10
Give Back 700
Boost 1000
View profile
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.