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();
另外,我认为您不应该使用管理员用户(如屏幕截图中所述)来访问服务,因为服务映射是为了防止对存储库的无限制访问而开发的
而是创建一个新的系统用户,并仅为用户提供服务所需的权限
要创建新的系统用户,可以执行以下步骤:
您如何访问CustomerService服务?问题已解决。我访问它是错误的。如果通过OSGi容器访问它,OSGi将注入依赖项,否则,它们将为空。我想最初您只是创建类,而没有使用
.getService(\u interface\ux)
@ruchikajain-请添加您的解决方案作为答案,以便其他人从中受益。