Search code examples
servletsaemsling

CQ5 SlingServlet and resourceTypes not working for specific resource paths


If I define a Sling Servlet as follows:

@SlingServlet(
    label="TestResourceTypeServlet",
    name = "com.company.project.servlets.TestResourceType",
    extensions = {"bob"},
    resourceTypes= {"cq:Page"},
    methods= {"GET"},
    metatype=true)
@Properties({
@Property(name = "service.description", value = "A test servlet"),
@Property(name = "service.vendor",  value = "Company")
})

The servlet picks up any get request to every page with an extension of '.bob', which is fine but what I really want is to handle a request to a specific page type,

SO

I modify resourceTypes to read

resourceTypes= {"site-administration/components/page/page-distribution"},

the supplied value is the specific sling:resourceType (copied and pasted out of CRXDE Lite) of a page I am trying to access with the .bob extension, but I get a 404!!!

All the documentation I've read says the above should work, but it does not.

Out of desperation I've even tried "site-administration/components/page" which is the super type of the page I want.

I'm running a clean 5.6.1 instance with this servlet as part of an OSGi bundle.

Am I missing something obvious here, or if not is anyone aware of any hot fixes that could resolve this issue ?

Any help would be appreciated as I'm starting to go slightly mad in the head.

EDIT

Ok, so I've gotten a little further: If I access the page with:

[path-to-page]/page.bob.html

The servlet fires. But in this URL is bob not a selector? and if so why when the resource type is cq:Page does the configuration work with bob as an extension?

Very confused :-S

I'm obviously missing something very simple here.


Solution

  • The problem with pages is that the resourceType is stored on the jcr:content node below the cq:Page node. If you would call [path-to-page]/_jcr_content.bob it should work. Note: _jcr_content is a url-safe version of jcr:content.

    Why your last example is actually working, I cannot tell.