Expand my Community achievements bar.

SOLVED

Trying to create CF programmatically

Avatar

Level 6

I am trying to create CF programmatically using a servlet. But, I do not see them being generated after servlet completion.

Resource parentRsc = resolver.getResource("<parent-path>");
        Resource templateOrModelRsc = request.getResourceResolver().getResource("<cf-model-path>");
        FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
        try {
            ContentFragment newFragment = tpl.createFragment(parentRsc, "test", "A fragment description.");
        } catch (ContentFragmentException e) {
            logger.error(e.getMessage(),e);
        }

Any pointers would be appreciated.

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hi @Madhur-Madan 

Is there any error you see in the logs ?

One possibility could be due to the access issue with the request ResourceResolver or it could be due to the commit() which is missing in the code block shared.

 

 

ResourceResolver resolver = getResourceResolver(resolverFactory,
				"sub-service");
Resource parentRsc = resolver.getResource("<parent-path>");
Resource templateOrModelRsc = resolver.getResource("<cf-model-path>");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
try {
ContentFragment newFragment = tpl.createFragment(parentRsc, "test", "A fragment description.");
resolver.commit();
} catch (ContentFragmentException e) {
   logger.error(e.getMessage(),e);
}

Code for getting the system resource resolver 
public static ResourceResolver getResourceResolver(final ResourceResolverFactory resourceResolverFactory, final String systemUser) throws LoginException {
		final Map<String, Object> param = new HashMap<>();
		param.put(ResourceResolverFactory.SUBSERVICE, systemUser);
		return resourceResolverFactory.getServiceResourceResolver(param);
}

 

 

By using the system resource resolver, the chances of logged in user not have the specific write permissions, goes away. 

 

Hope this helps!

Thanks

View solution in original post

2 Replies

Avatar

Correct answer by
Community Advisor

Hi @Madhur-Madan 

Is there any error you see in the logs ?

One possibility could be due to the access issue with the request ResourceResolver or it could be due to the commit() which is missing in the code block shared.

 

 

ResourceResolver resolver = getResourceResolver(resolverFactory,
				"sub-service");
Resource parentRsc = resolver.getResource("<parent-path>");
Resource templateOrModelRsc = resolver.getResource("<cf-model-path>");
FragmentTemplate tpl = templateOrModelRsc.adaptTo(FragmentTemplate.class);
try {
ContentFragment newFragment = tpl.createFragment(parentRsc, "test", "A fragment description.");
resolver.commit();
} catch (ContentFragmentException e) {
   logger.error(e.getMessage(),e);
}

Code for getting the system resource resolver 
public static ResourceResolver getResourceResolver(final ResourceResolverFactory resourceResolverFactory, final String systemUser) throws LoginException {
		final Map<String, Object> param = new HashMap<>();
		param.put(ResourceResolverFactory.SUBSERVICE, systemUser);
		return resourceResolverFactory.getServiceResourceResolver(param);
}

 

 

By using the system resource resolver, the chances of logged in user not have the specific write permissions, goes away. 

 

Hope this helps!

Thanks

Avatar

Employee Advisor

Did you do a resolver.commit(); afterwards?