AEM 6.3 ResourceResolverFactory为null并引发NullPointerException

AEM 6.3 ResourceResolverFactory为null并引发NullPointerException,aem,osgi-bundle,sling,aem-6,Aem,Osgi Bundle,Sling,Aem 6,我也试过这个帖子 接口 package org.employee.employee.core.admin; import org.apache.sling.api.resource.ResourceResolver; public interface CustomerService { public String getCustomerData(); } 服务类==>获取resolverFactory null package org.employee.employee.core.

我也试过这个帖子

接口

package org.employee.employee.core.admin;

import org.apache.sling.api.resource.ResourceResolver;

public interface CustomerService {
    public String getCustomerData();
}
服务类==>获取resolverFactory null

package org.employee.employee.core.admin; 

import java.util.HashMap;
import java.util.Map;    
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(metatype = true, immediate = true)
@Service
public class CustomerServiceImpl implements CustomerService {

    protected final Logger log = LoggerFactory.getLogger(this.getClass());

    @Reference
    private ResourceResolverFactory resolverFactory;

    public String getCustomerData() {
        Map<String, Object> param = new HashMap<String, Object>();
        param.put(ResourceResolverFactory.SUBSERVICE, "CustomerService");
        ResourceResolver resolver = null;
        try {
            resolver = resolverFactory.getServiceResourceResolver(param);
            System.out.println(resolver);
        } catch (LoginException loginExcp) {
            log.error("Exception while getting resource resolver." + loginExcp);
        }
        return resolver.toString();
    }
}
包org.employee.employee.core.admin;
导入java.util.HashMap;
导入java.util.Map;
导入org.apache.felix.scr.annotations.Component;
导入org.apache.felix.scr.annotations.Reference;
导入org.apache.felix.scr.annotations.Service;
导入org.apache.sling.api.resource.LoginException;
导入org.apache.sling.api.resource.ResourceResolver;
导入org.apache.sling.api.resource.ResourceResolverFactory;
导入org.slf4j.Logger;
导入org.slf4j.LoggerFactory;
@组件(元类型=true,立即数=true)
@服务
公共类CustomerServiceImpl实现CustomerService{
受保护的最终记录器日志=LoggerFactory.getLogger(this.getClass());
@参考文献
私有资源解析工厂解析工厂;
公共字符串getCustomerData(){
Map param=new HashMap();
参数put(resourcesolverfactory.SUBSERVICE,“CustomerService”);
ResourceResolver解析器=null;
试一试{
resolver=resolverFactory.getServiceResourceResolver(参数);
系统输出打印LN(分解器);
}catch(LoginException loginExcp){
log.error(“获取资源解析程序时出现异常。”+loginExcp);
}
返回解析器.toString();
}
}
服务组件显示状态=>Active

用户映射器


我访问它就像

CustomerService customerService = new CustomerService();
String resolver = customerService.getCustomerData();
这是不正确的,由

@Reference
private CustomerService customerService;
String resolver = customerService.getCustomerData();
另外,我认为您不应该使用管理员用户(如屏幕截图中所述)来访问服务,因为服务映射是为了防止对存储库的无限制访问而开发的

而是创建一个新的系统用户,并仅为用户提供服务所需的权限

要创建新的系统用户,可以执行以下步骤:

  • 在AEM实例上,打开
  • 按屏幕左上角的登录链接,以管理员身份登录
  • 单击CreateSystemUser并将用户ID分配为myServiceUser,将中间路径分配为system/MyModule
  • 使用useradmin控制台为用户分配权限
  • 向ServiceUserMapper配置添加配置修改
  • 有关完整步骤,请参阅此帮助X。

    另一个可以证明这一点的答案是:

    这个来自ACS Commons的工具对于确保服务用户的存在非常有帮助。

    您如何访问CustomerService服务?问题已解决。我访问它是错误的。如果通过OSGi容器访问它,OSGi将注入依赖项,否则,它们将为空。我想最初您只是创建类,而没有使用
    .getService(\u interface\ux)
    @ruchikajain-请添加您的解决方案作为答案,以便其他人从中受益。