Skip to main content
New Participant
August 21, 2017
Solved

AEM 6.3 ResourceProvider resourceResolve.getResource always returns null

  • August 21, 2017
  • 11 replies
  • 3745 views

I am having trouble solving the following issue: I have a ResourceProvider with a root mapped at '/synthetic/config'. In the getResource() method I retrieve the resourceResolver and try to fetch the resource (this resource does exists!) but this never succeeds, I always get a 'null'.

Here is my code (I based mine on https://svn.apache.org/repos/asf/sling/trunk/launchpad/test-services/src/main/java/org/apache/sling/launchpad/testservic…  ):

@Component

@Service(value=ResourceProvider.class)

@Properties({

        @Property(name = ResourceProvider.PROPERTY_NAME, value = "Planets"),

        @Property(name = ResourceProvider.PROPERTY_ROOT, value= ConfigResourceProvider.SYNTHETIC_CONFIG_ROOT)

})

public class ConfigResourceProvider extends ResourceProvider<ConfigResourceProvider.DoesNotNeedAContext> {

    public static final String SYNTHETIC_CONFIG_ROOT = "/synthetic/config";

    @Override

    public Resource getResource(ResolveContext<DoesNotNeedAContext> resolveContext, String s, ResourceContext resourceContext, Resource resource) {

        Resource resource1 = resolveContext.getResourceResolver().getResource("/content/we-retail");

        return null;

    }

    @Override

    public Iterator<Resource> listChildren(ResolveContext<DoesNotNeedAContext> resolveContext, Resource resource) {

        return null;

    }

    /** If this provider required a context this would be more elaborate,

     *  but for this simple example we don't need one.

     */

    public static class DoesNotNeedAContext {

    };

}

How can I fix this? Thanks in advance!

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by smacdonald2008

IS that the value that appears when you open the Manifest file in the bundle? You need to make sure they match exactly. Also make sure the system user has the correct permissions. These are 2 things that can explain the null.

11 replies

New Participant
September 3, 2018
smacdonald2008
New Participant
August 21, 2017

Can you please send me an email at scottm@adobe.com -- thxs!

New Participant
August 21, 2017

I was missing the correct permission, thank you very much both of you!

smacdonald2008
smacdonald2008Accepted solution
New Participant
August 21, 2017

IS that the value that appears when you open the Manifest file in the bundle? You need to make sure they match exactly. Also make sure the system user has the correct permissions. These are 2 things that can explain the null.

New Participant
August 21, 2017
smacdonald2008
New Participant
August 21, 2017

Post screen shot of the Sling Mapping Service. Make sure you are specifying the correct Symbolic Bundle name in that service.

New Participant
August 21, 2017

I added the following line in the 'Apache Sling Service User Mapper Service':


aem-company-platform-core-bundle:datawrite=platform-company-service (NOTE: aem-company-platform-core-bundle is the symbolic bundle name)

And I have the following code:

//Inject a Sling ResourceResolverFactory

@Reference

private ResourceResolverFactory resolverFactory;

@Override

public Resource getResource(ResolveContext<DoesNotNeedAContext> resolveContext, String s, ResourceContext resourceContext, Resource resource) {

    Map<String, Object> param = new HashMap<String, Object>();

    param.put(ResourceResolverFactory.SUBSERVICE, "datawrite");

    ResourceResolver resolver = null;

    //Create a valid ResourceResolver

    try {

        resolver = resolverFactory.getServiceResourceResolver(param);

        Resource thisResouceIsNull = resolver.getResource("/content/we-retail");

    } catch (LoginException e) {

        e.printStackTrace();

    }

    return null;

}

I still get null If I try to get a resource using that resolver:

Is something still missing?

Ratna_Kumar
New Participant
August 21, 2017

Hey,

Scott is right. In order to create  ResourceResolver, you have to use mentioned code:

Map<String, Object> param = new HashMap<String, Object>();

param.put(ResourceResolverFactory.SUBSERVICE, "datawrite");

ResourceResolver resolver = null;

try {

         

    //Create a valid ResourceResolver

resolver = resolverFactory.getServiceResourceResolver(param);

~Ratna

smacdonald2008
New Participant
August 21, 2017

You are missing the code required to create a ResourceResolver. I did not see it in that link.

Map<String, Object> param = new HashMap<String, Object>();

param.put(ResourceResolverFactory.SUBSERVICE, "datawrite");

ResourceResolver resolver = null;

try {

          

    //Create a valid ResourceResolver

resolver = resolverFactory.getServiceResourceResolver(param);

.

See this article -- Scott's Digital Community: Querying Adobe Experience Manager 6 data using the Sling getServiceResourceResolver method

New Participant
August 21, 2017

smacdonald2008 I have a service user and the 'Apache Sling Service User Mapper Service' has the default user set to this user. Am I missing something?