Java ResourceResolverFactory为空(Adobe Experience Manager AEM)

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

我正在尝试从ResourceResolverFactory获取对ResourceResolver的引用,如下所示:

@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组件是否已实际启动并运行?