Hi ,
I need some help on where I am making the mistake in getting the ResourceResolver Object using the Apache Sling Service User Mapper Service.
I am trying to get the ResourceResolver Object from the Java service using the mapper service.
I am getting NULL Pointer Exception .
I had pasted the code snippet of the Service class below.
I had pasted the code snippet of the WCMUsePojo class below.
Created the System User with full permission for /content folder.
And mapper the System user with the service name and bundleID in the below format.
ServiceMapping= telstrahealth.core:datawrite=datawrite-service
BundleID or SymbolicName of the bundle folder= telstrahealth.core
Subservice Name=datawrite
System User created/mapped=datawrite-service
Please help to identify which step i am missing, as I am getting NULL Pointet Exception.
Any pointers in this regards is much appreciated.
thanks.
Sunil
Code snippet of my WCMUsePojo class is below:
@Component(service=WCMUsePojo.class)
public class SolutionsComponent extends WCMUsePojo
{
private final Logger logger = LoggerFactory.getLogger(getClass());
private final String QUERY_PROP = "_property";
private final String QUERY_PROP_VAL = "_property.value";
List<TagCountBean> tagList = null;
List<ProductTagCountBean> tagList2 = null;
public void activate()
{
TagService tagSrvc= getSlingScriptHelper().getService(TagService.class);
logger.info("tagSrvctagSrvctagSrvctagSrvctagSrvc"+tagSrvc);
ResourceResolver resolver=tagSrvc.getResolverObject();
logger.info("Inside Activate method---->>>");
}
}
I wrote a TagServiceImpl java service class in the project.
Below is the code snippet:
import com.au.telstrahealth.core.service.TagService;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.service.component.annotations.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.osgi.service.component.annotations.*;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.ComponentContext;
import java.util.*;
import javax.jcr.Session;
//This is a component so it can provide or consume services
@Component(service=TagService.class,immediate = true)
public class TagServiceImpl implements TagService {
@Reference
ResourceResolverFactory resFactory;
private Session adminSession;
private final Logger logger = LoggerFactory.getLogger(getClass());
//Define a class member named key
private int key = 0 ;
ResourceResolver resolver;
public ResourceResolver getResolverObject(){
try{
Map<String, Object> param = new HashMap<String, Object>();
param.put(ResourceResolverFactory.SUBSERVICE, "datawrite");
logger.info("ResourceResolver inside TagServiceImpl Just before getting in to try block--");
resolver = resFactory.getServiceResourceResolver(param);
logger.info("ResourceResolver in TagServiceImpl class associated System User--"+resolver.getUserID());
}catch(Exception e){
logger.info("ERROR" + e + e.getStackTrace().toString());
e.printStackTrace();
}
return resolver;
}
}
Did you ever figure this out?
Views
Replies
Total Likes
Hey Guys,
Could you please make sure you followed all 3 steps to get service user session/resource
Step 1: Use in-built system user in OSGI configuration. In OSGI select Apache Sling Service User Mapper Service
e.g. AEM63App.core:readService=training-user
Step 2: Create system user(training-user) and assign that system user the permissions to access the desire folder/paths.
Step 3: In code, do below, as example:
Session session = null; | |
Map<String, Object> paramMap = new HashMap<String, Object>(); | |
paramMap.put(ResourceResolverFactory.SUBSERVICE, "readService"); | |
try { | |
resourceResolver = resourceFactory.getServiceResourceResolver(paramMap); | |
// logger.debug("User id inside {}", resourceResolver.getUserID()); | |
session = resourceResolver.adaptTo(Session.class); | |
} catch (Exception e) { | |
// TODO Auto-generated catch block | |
e.printStackTrace(); | |
logger.debug("getSubserviceSession : Unable to Login : " + e); | |
} |
Views
Replies
Total Likes
This is not new - been around since 2014.
We have plenty of docs on this - see this:
This link seems expired (404) is there a new link? I'm trying to access the jcr from an apache felix osgi component.
Views
Replies
Total Likes
Views
Likes
Replies
Views
Likes
Replies