Aem 绑定到资源类型OSGi R6注释的Sling servlet不起作用

Aem 绑定到资源类型OSGi R6注释的Sling servlet不起作用,aem,apache-felix,sling,aem-6,Aem,Apache Felix,Sling,Aem 6,我想将servlet注册到我的主基本页资源类型,这样当选择器和扩展命中同一页时,应该选择我的servlet,而不是正常的页面呈现 我能够使用旧的SCR注释轻松实现此行为。请参阅下面的工作代码 @Component(metatype = false) @Service({ javax.servlet.Servlet.class, org.apache.sling.api.servlets.SlingSafeMethodsServlet.class }) @Properties({

我想将servlet注册到我的主基本页资源类型,这样当选择器和扩展命中同一页时,应该选择我的servlet,而不是正常的页面呈现

我能够使用旧的SCR注释轻松实现此行为。请参阅下面的工作代码

@Component(metatype = false)
@Service({ javax.servlet.Servlet.class,
        org.apache.sling.api.servlets.SlingSafeMethodsServlet.class })
@Properties({
        @Property(name = "sling.servlet.resourceTypes", value = "project/project-foundation/components/structure/page"),
        @Property(name = "sling.servlet.selectors", value = {"info"}),
        @Property(name = "sling.servlet.extensions", value = "js"),
        @Property(name = "sling.servlet.methods", value = "GET"),
        @Property(name = "service.description", value = "Products Servlet") })
现在我想使用OSGiR6注释来完成这项工作,下面是我正在使用的注释

@Component(service = Servlet.class, property = { 
        "sling.servlet.selectors=info",
        "sling.servlet.extensions=js",
        "sling.servlet.methods="+ HttpConstants.METHOD_GET,
        "sling.servlet.resourceTypes=project/project-foundation/components/structure/page"
})
当我点击页面/en-us/fun-games.info.js时,我的servlet应该会被调用,目前正在打印hello-world字符串。(如果被调用)

当我使用OSGi R6注释时,当我用selector=info和extension=js点击上面的URL时,这个servlet并没有被选中

但这适用于旧的SCR注释。我已检查我的servlet是否已正确注册

不知道发生了什么事

注意:我使用的是AEM 6.5


我提到了这个

天哪,这比我想象的要难

我使用OSGiR7注释解决了这个问题。我不知道它们的存在,AEM对此表示支持

@Component(immediate = true,service = { Servlet.class })
@SlingServletResourceTypes(
    resourceTypes="project/project-foundation/components/structure/page", 
    methods= "GET",
    selectors={ "info", "js"})
另外需要注意的是,我使用“js”作为选择器,而不是扩展名

我这样调用了页面 /en us/fun games/mario.info.js

可以在完整或缩短的URL上调用相同的servlet,这无关紧要

还有一个依赖性:

           <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.servlets.annotations</artifactId>
            <version>1.2.4</version>
          </dependency>

org.apache.sling

天哪,这比我想象的要难

我使用OSGiR7注释解决了这个问题。我不知道它们的存在,AEM对此表示支持

@Component(immediate = true,service = { Servlet.class })
@SlingServletResourceTypes(
    resourceTypes="project/project-foundation/components/structure/page", 
    methods= "GET",
    selectors={ "info", "js"})
另外需要注意的是,我使用“js”作为选择器,而不是扩展名

我这样调用了页面 /en us/fun games/mario.info.js

可以在完整或缩短的URL上调用相同的servlet,这无关紧要

还有一个依赖性:

           <dependency>
            <groupId>org.apache.sling</groupId>
            <artifactId>org.apache.sling.servlets.annotations</artifactId>
            <version>1.2.4</version>
          </dependency>

org.apache.sling

尝试点击servlet,同时在路径中提供JCR内容,如:

en-us/fun-games/_jcr_content.info.js

我也遇到了同样的问题,但当我在路径中提供JCR内容时,它起了作用。

尝试在路径中提供JCR内容的同时点击servlet,如:

en-us/fun-games/_jcr_content.info.js

我遇到了同样的问题,但当我在路径中提供JCR内容时,它起了作用。

您是否也更新了pom.xml以使用
maven bundle插件
3.2.0版或更高版本。OSGi R6注释需要它。Hi@rakhi4110我的maven bundle插件版本是
org.apache.felix maven bundle plugin 4.1.0 true
您是否也更新了pom.xml以使用
maven bundle plugin
3.2.0或更高版本。OSGi R6注释需要它。Hi@rakhi4110我的maven bundle插件版本是
org.apache.felix maven bundle插件4.1.0 true