在OSGI中导入JcrTagImpl类时出现问题

在OSGI中导入JcrTagImpl类时出现问题,osgi,maven-3,aem,jcr,sling,Osgi,Maven 3,Aem,Jcr,Sling,我需要导入JcrTagImpl类,该类位于CQ Day Communique 5 Tagging jar文件(com.Day.CQ.CQ Tagging)中 然后我尝试在pom.xml的依赖项中添加上面的jar,如下所示,然后我可以将整个包作为com.day.cq.tagging.*导入 <dependency> <groupId>com.day.cq</groupId> <artifactId>cq-tagging</art

我需要导入JcrTagImpl类,该类位于CQ Day Communique 5 Tagging jar文件(com.Day.CQ.CQ Tagging)中

然后我尝试在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
cq标记
5.7.18
假如
更新:
我需要调用getTagID方法,它位于
com.day.cq.tagging.JcrTagImpl
类中。 AEM使用
com.day.cq.tagging.TagCommandServlet
在标记控制台中显示标记ID。TagCommandServlet正在导入JcrTagImpl类并调用
getTagID
方法


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

您试图直接调用实现而不是服务。通常,实现是不公开的,您必须使用服务

我想,TagManager是一种吊索服务,您可以使用它来处理标签。使用@Reference将其注入到您的服务中,或者使用sling.adapto()调整您的资源

编辑:

正如我前面提到的,您不能直接访问实现类,因为它不会由bundle导出

但是,要获得标签ID,您可以根据需要使用以下任何方法

  • 如果有标记的路径,则可以获取资源和adapto tag.class并检索标记ID
  • 您可以从ResourceResolver对象适配到TagManager.class,然后解析标记路径以获得标记对象
  • 使用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();
    }
    
    @Reference
    私人JcrTagManagerFactory JcrTagManagerFactory;
    受保护的无效数据集(SlingHttpServletRequest-req,SlingHttpServletResponse-res){
    //第一种方法
    ResourceResolver解析器=req.getResourceResolver();
    Resource tagResource=resolver.resolve(“”);
    tag1=tagResource.adapto(Tag.class);
    tag1.getTagID();
    //第二种方法
    TagManager TagManager=resolver.adapto(TagManager.class);
    Tag tag2=tagManager.resolve(“”);
    tag2.getTagID();
    //第三种方法
    Session Session=resolver.adapto(Session.class);
    TagManager TagManager=jcrTagManagerFactory.getTagManager(会话);
    Tag tag3=tagManager.resolve(“”);
    tag3.getTagID();
    }
    
    }


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

    谢谢提供信息。是的,你是对的。我无法导入那个imp类。我已经更新了。你能检查一下吗。