简体   繁体   English

从 ResourceResolverFactory 获取 ResourceResolver,但 ResourceResolver 无法通过给定路径获取 Resource

[英]Get ResourceResolver From ResourceResolverFactory, but the ResourceResolver is not able to get Resource by given path

Given siutation like this, author click publish (activate) a page Then I have following listener to handleEvent鉴于这样的情况,作者点击发布(激活)页面然后我有以下监听器来处理事件

public class ArticleContentActivationEventHandler implements EventHandler {


private static final Logger LOGGER = LoggerFactory.getLogger(ArticleContentActivationEventHandler.class);

private static final String ARTICLE_PAGE_TEMPLATE = "/conf/myproject/settings/wcm/templates/article-template";

@Reference
private ResourceResolverService resourceResolverService;

@Override
public void handleEvent(Event event) {

    ResourceResolver resourceResolver = null;
    try {
        resourceResolver = resourceResolverService.getServiceResourceResolver();
        String resourcePath = getResourcePath(event);
        Resource resource = resourceResolver.getResource(resourcePath);

        //the resource is null, the resource path is /content/myproject/us/en, 
        //resourceResolver is not able to resolve it somehow
        for (Iterator<Resource> it = resourceResolver.getResource("/content/myproject/us/en").getChildren().iterator(); it.hasNext(); ) {
            Resource r = it.next();
            String s = r.getPath();
            String t = r.getResourceType();
        }


        if (resource.isResourceType("cq:Page")) {
            Resource jcr_content = resource.getChild("jcr:content");
            ValueMap vm = jcr_content.getValueMap();
            String template = null;
            if (vm.containsKey("cq:template")) {
                template = PropertiesUtil.toString(vm.get("cq:template"), "");
            }

and below is the interface:下面是界面:

public interface ResourceResolverService {

ResourceResolver getServiceResourceResolver() throws LoginException;

void closeResourceResolver(ResourceResolver resourceResolver);
}

and the impl class:和 impl class:

@Component(service = ResourceResolverService.class, immediate = true)
public class ResourceResolverServiceImpl implements ResourceResolverService {

    @Reference
    private ResourceResolverFactory resourceResolverFactory;

    Logger logger = LoggerFactory.getLogger(ResourceResolverServiceImpl.class);

    @Activate
    protected void activate() {
        logger.info("*** Activating Service ResourceResolverServiceImpl");
    }

    @Override
    public ResourceResolver getServiceResourceResolver() throws LoginException {
        final Map<String, Object> param = Collections.singletonMap(ResourceResolverFactory.SUBSERVICE, (Object) "getResourceResolver");
        //the ResourceResolver returned here may got some issue?
        return resourceResolverFactory.getServiceResourceResolver(param);
    }

    @Override
    public void closeResourceResolver(ResourceResolver resourceResolver) {
        resourceResolver.close();
    }

}

I do have the osgi config setup by following tutorial http://www.aemcq5tutorials.com/tutorials/resourceresolver-from-resourceresolverfactory/我确实按照教程http://www.aemcq5tutorials.com/tutorials/resourceresolver-from-resourceresolverfactory/进行了 osgi 配置设置

But in my actually even handler class, it never successfully resolved resource resourceResolver is not able to resolve /content/myproject/us/en, resourceResolver keep give me null value但在我实际上甚至处理程序 class 中,它从未成功解析资源 resourceResolver 无法解析 /content/myproject/us/en,resourceResolver 继续给我 null 值

Could anyone experienced this suggest me some code sample to resolve my issue?有没有人经历过这个建议我一些代码示例来解决我的问题? thanks谢谢

Check the User mapping configuration, the bundle id used in the configuration should match to your project core artifact id.检查用户映射配置,配置中使用的包 id 应该与您的项目核心工件 id 匹配。 For example: in the configuration bundleId = com.day.cq.wcm.cq-msm-core例如:配置中的bundleId = com.day.cq.wcm.cq-msm-core

Alternatively you can try below code instead或者,您可以尝试以下代码

Map<String, Object> param = new HashMap<String, Object>(); Map<String, Object> 参数 = new HashMap<String, Object>(); param.put(ResourceResolverFactory.SUBSERVICE, "service-user"); param.put(ResourceResolverFactory.SUBSERVICE, "服务用户"); ResourceResolver resolver = resourceResolverFactory.getServiceResourceResolver(param); ResourceResolver 解析器 = resourceResolverFactory.getServiceResourceResolver(param);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM