Java ResourceResolverFactory为空(Adobe Experience Manager AEM)
我正在尝试从ResourceResolverFactory获取对ResourceResolver的引用,如下所示:Java ResourceResolverFactory为空(Adobe Experience Manager AEM),java,aem,Java,Aem,我正在尝试从ResourceResolverFactory获取对ResourceResolver的引用,如下所示: @Reference private ResourceResolverFactory resourceResolverFactory; public void someMethod() { Map<String, Object> authenticationMap = new HashMap<String, Object>(); a
@Reference
private ResourceResolverFactory resourceResolverFactory;
public void someMethod() {
Map<String, Object> authenticationMap = new HashMap<String, Object>();
authenticationMap.put(ResourceResolverFactory.USER, "user");
authenticationMap.put(ResourceResolverFactory.PASSWORD, "pwd");
//This line returns NullPointerException
ResourceResolver resourceResolver = resourceResolverFactory.getResourceResolver(authenticationMap);
}
@Reference
私有ResourceResolveFactory ResourceResolveFactory;
公共方法(){
Map authenticationMap=new HashMap();
authenticationMap.put(resourcesolverfactory.USER,“USER”);
authenticationMap.put(resourcesolverfactory.PASSWORD,“pwd”);
//此行返回NullPointerException
ResourceResolver ResourceResolver=resourceResolverFactory.getResourceResolver(authenticationMap);
}
有人能告诉我我做错了什么吗?AEM API v6.0版。因此,我所做的是创建一个Activator类,在部署和启动捆绑包时调用该类。Activator类然后获取org.apache.sling.jcr.api.SlingRepository的实例,我们可以使用该实例连接到jcr。以下是激活器代码:
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.jcr.api.SlingRepository;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component(immediate = true, label = "Commons Activator")
public class Activator implements BundleActivator {
@Reference
private SlingRepository repository;
private static final Logger logger = LoggerFactory.getLogger(Activator.class);
@Activate
@Override
public void start(BundleContext context) throws Exception {
logger.info(context.getBundle().getSymbolicName() + " started");
//My own factory class instance
ResourceResolverDiscoveryService rrf = ResourceResolverDiscoveryService.getInstance();
//Set the 'repository' in your factory class instance
rrf.setSlingRepositoryFactory(repository);
}
@Deactivate
@Override
public void stop(BundleContext context) throws Exception {
logger.info(context.getBundle().getSymbolicName() + " stopped");
}
}
然后在我想使用JCR存储数据的类中,我执行了以下操作:
public class StoreInJCR {
public void store(Quote quote) throws LoginException, RepositoryException {
SlingRepository slingRepository = ResourceResolverDiscoveryService.getInstance().getSlingRepositoryFactory();
// GOT IT!!! Mission Accomplished
Session session = slingRepository.loginAdministrative(null);
Node root = session.getRootNode();
// Further code
.
.
}
}
希望有人觉得这很有用。可以分享一些关于错误的信息。您是否用@Component/@Service annotation标记了此类?Pravin-这是一个NullPointerException。我无法获取resourceResolverFactory引用。Alex-是的,类被标记为@component我可以假设您的组件/服务没有出现吗?您是否已验证ResourceResolverFactory组件是否已实际启动并运行?