CQ5.3 Servlet不可用(和Servlet解析器路径配置(5.3 v 5.6))

时间:2014-08-19 07:38:30

标签: java servlets cq5 aem

从历史上看,我只使用过CQ 5.6,但现在正在使用5.3进行项目,并且无法获得注册和访问的servlet。当我尝试命中servlet时(有和没有和扩展名)我在错误日志中得到以下 INFO 行:

GET /bin/TestServlet.json HTTP/1.1] org.apache.sling.engine.impl.SlingMainServlet service: Resource /bin/TestServlet.json not found

我可以构建包含servlet的bundle,使用maven-sling-plugin进行部署,然后bundle在控制台中以“活动”结束,但servlet不可用。我在我的类文件中使用以下内容来定义servlet:

@SlingServlet(paths = {"/bin/TestServlet"}, methods = {"GET"}, extensions = {"json"}, metatype = true)
@Properties({
  @Property(name = "service.name", value = "com.something.servlets.TestServlet", propertyPrivate = true),
  @Property(name = "service.description", value= "Test servlet I am trying to geet working", propertyPrivate = true),
  @Property(name = "service.vendor", value = "something", propertyPrivate = true)
})

请注意,我还使用@Component(.......)@Service(value=Servlet.class)注释

尝试了该备选方案

看看问题是否是基于配置的(思考/ bin被阻止)我回到5.6.1来比较配置并注意到 Apache Sling Servlet / Script Resolver和Error Handler的配置 在5.3和5.6之间有所不同。

在5.6中,您可以配置servletresolver.paths(如果我理解正确的话)打开执行路径,但这在5.3中不存在

所以:

  1. servletresolver.paths的配置是否存在于5.3?
  2. 我甚至可以在5.3中注册这样的servlet吗?
  3. 如果对2的回答是“没有”,你能否在5.3中找到关于如何做到这一点的示例/教程(本版本的文档和教程很简单)?
  4. 提前致谢

    编辑(决议): 它似乎取决于POM中的版本(以及可能的插件配置)。可能只是罪魁祸首,但我没有时间尝试所有的排列。如果我有时间尝试,我会添加一个编辑。

    成功版本: maven-bundle-plugin - v2.4.0 maven-scr-plugin - v1.13.0 maven-sling-plugin - v2.1.0

1 个答案:

答案 0 :(得分:2)

在CQ5.3中,你可以使用JCR解析器'检查servlet映射。 转到

http://localhost:4502/system/console/jcrresolver

在“配置测试”中输入servlet的路径。 e.g。

http://localhost:4502/bin/TestServlet

解析结果应映射到您的servlet 例如

ServletResource, servlet=com.test.impl.HelloJSONServlet, path=/bin/TestServlet

还有一些代码片段可以在CQ5.3中使用

@Component(immediate = true, metatype = false, label = "Hello JSON Servlet")
@Service(serviceFactory = false, value = javax.servlet.Servlet.class)
@Properties(value = {
        @org.apache.felix.scr.annotations.Property(name = "sling.servlet.methods", value = { "GET" }),
        @org.apache.felix.scr.annotations.Property(name = "sling.servlet.extensions", value = { "json" }),
        @org.apache.felix.scr.annotations.Property(name = "sling.servlet.paths", value = {"/bin/TestServlet"})

})
public class HelloJSONServlet extends SlingAllMethodsServlet {

    protected void doGet(SlingHttpServletRequest request,
            SlingHttpServletResponse response) throws ServletException,
            IOException {
        String username = request.getParameter("username");
        response.setContentType("application/json");
        response.getWriter().write("{ \"hello\" : \""+username+"\" }");
    }
}