Я получаю исключение nullpointer в журналах ошибок, когда использую подсервис для чтения деталей шаблона в AEM 6.4
map.get дает исключение нулевого указателя
с сообщением об ошибке
com.adobe.cq.sightly.WCMUsePojo Не удалось активировать класс Use
java.lang.IllegalArgumentException: javax.jcr.RepositoryException:
Эта сессия была закрыта. в
org.apache.sling.jcr.resource.internal.JcrValueMap.readFully (JcrValueMap.java:395)
[org.apache.sling.jcr.resource: 3.0.8] в
org.apache.sling.jcr.resource.internal.JcrValueMap.entrySet (JcrValueMap.java:183)
[org.apache.sling.jcr.resource: 3.0.8] в
com.mysite.core.helpers.AnalyticsHelper.activate (AnalyticsHelper.java:138)
[mysite-core: 1.0.0.SNAPSHOT] в
com.adobe.cq.sightly.WCMUsePojo.init (WCMUsePojo.java:86)
[Com.adobe.cq.sightly.cq-WCM-красивый-расширение: 1.5.12]
в AEM 6.3 работает нормально, но в AEM 6.4 выдает исключение нулевого указателя
карта нулевая. Работает нормально, когда убираю закрытие Resresolver
MysiteReadTemplateService mysiteReadTemplateService = getSlingScriptHelper()
.getService(MysiteReadTemplateService .class);
ValueMap map = mysiteReadTemplateService
.fetchTemplateDetails(templatePath);
if (map != null) {
templateName = map.get("jcr:title", "");
templateDescription = map.get("jcr:description", "");
}
внутри метода fetchTemplateDetails -
Map<String,Object> paramMap = new HashMap<String,Object>();
//Mention the subServiceName that is configured in the User Mapping
paramMap.put(ResourceResolverFactory.SUBSERVICE, "mysitereadservice");
log.info("After the param");
ResourceResolver rr = null;
ValueMap map =null;
try{
rr = resourceFactory.getServiceResourceResolver(paramMap);
log.info("UserId : " + rr.getUserID());
Resource templateResource = rr.getResource(templatePath);
log.info("Resource : " + templateResource.getPath());
map = templateResource.getValueMap();
rr.close();
}catch(Exception e){
log.error(e.getMessage());
}
return map;
при комментировании rr.close в классе analyticshelper map не является нулевым.
возможные объяснения приведены в
com.sun.jdi.InvocationException произошел вызов метода
но, тем не менее, мы хотим закрыть средство поиска ресурсов, так как его закрытие приведет к множеству незакрытых сеансов.
Если кто-то сталкивался с той же проблемой, не могли бы вы сообщить нам свои мысли или как я могу реорганизовать код, чтобы мы могли закрыть распознаватель ресурсов, так как карта не является нулевой.