【问题标题】:Issue with importing JcrTagImpl class in OSGI在 OSGI 中导入 JcrTagImpl 类的问题
【发布时间】:2015-05-30 18:11:23
【问题描述】:

我需要导入位于 CQ Day Communique 5 Tagging jar 文件(com.day.cq.cq-tagging) 中的 JcrTagImpl 类

然后我尝试在 pom.xml 的依赖项中添加上面的 jar,如下所示,然后我可以将整个包导入为 com.day.cq.tagging.*;

<dependency>
    <groupId>com.day.cq</groupId>
    <artifactId>cq-tagging</artifactId>
    <version>5.7.18</version>
    <scope>provided</scope>
</dependency>

更新:
我需要调用位于com.day.cq.tagging.JcrTagImpl 类中的getTagID 方法。 AEM 使用 com.day.cq.tagging.TagCommandServlet 在标记控制台中显示 TagID。 TagCommandServlet 正在导入 JcrTagImpl 类并调用getTagID 方法。

我有自己的 servlet,我想致电 getTagID。我无法直接调用 JcrTagImpl 实现的 getTagID,因为它没有公开。可以通过任何注释完成吗?请您指导我如何调用getTagId方法。

【问题讨论】:

    标签: osgi maven-3 aem jcr sling


    【解决方案1】:

    您正在尝试直接调用实现而不是服务。通常,实现不会公开,您必须改用该服务。

    我猜,TagManager 可以作为 Sling Service 使用,您可以使用它来处理标签。使用 @Reference 将其注入您的服务或使用 sling.adaptTo() 来调整您的资源。

    编辑:

    就像我之前提到的,你不能直接访问一个实现类,因为它不会被包导出。

    但要获取标签 ID,您可以根据自己的要求使用以下任何一种方法。

    1. 如果你有标签的路径,你可以获取资源和adapto Tag.class并检索tagID
    2. 你可以从ResourceResolver对象中适配TagManager.class,然后解析标签的路径得到Tag对象
    3. 使用JcrTagManagerFactory服务获取标签管理器,然后解析标签的路径。

    @SlingServlet({ //config }) 公共类 MyServlet 扩展 SlingSafeMethodsServlet {

    @Reference
    private JcrTagManagerFactory jcrTagManagerFactory;
    
    protected void doGet(SlingHttpServletRequest req, SlingHttpServletResponse res) {
        //First Method
        ResourceResolver resolver = req.getResourceResolver();
        Resource tagResource = resolver.resolve("<<path to the tag>>");
        Tag tag1 = tagResource.adaptTo(Tag.class);
        tag1.getTagID();
    
        //Second Method
        TagManager tagManager = resolver.adaptTo(TagManager.class);
        Tag tag2 = tagManager.resolve("<<path to tag>>");
        tag2.getTagID();
    
        //Third Approach
        Session session = resolver.adaptTo(Session.class);
        TagManager tagManager = jcrTagManagerFactory.getTagManager(session);
        Tag tag3 = tagManager.resolve("<<path to tag>>");
        tag3.getTagID();
    }
    

    }

    使用TagManager,您可以获取当前资源上设置的标签或查询标签等。

    【讨论】:

    • 感谢您的信息。是的,你是对的。我无法导入那个 imp 类。我已经更新了它。请您检查一次。
    猜你喜欢
    • 2023-04-08
    • 2012-07-27
    • 2014-09-04
    • 2017-04-07
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多