Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

servlet not being map to path

Avatar

Level 2

 

1 - The class is being listed in /system/console/components (and active).

2 - When I entry the url in Sling Servlet Resolver (system/console/servletresolver/) I get this message:

Could not find a suitable servlet for this request!

3- When I call it from postman or direct in browser:

4242 TIMER_END{305,ResourceResolution} URI=/bin/test/clients-by-name resolves to Resource=NonExistingResource

4 - I've clenead the browser, updated postman and restarted aem instance (crx-quickstart folder was deleted as well)

5- In postman the error status massage is 409 (Conflict):

<td><div id="Message">repository state conflicting with request</div></td>
6- Deleted filter methods and checked the allow empty box
 

Servlet class (I'm just trying to do a hello world):

@component(service = {Servlet.class},
        property = {
                SLING_SERVLET_METHODS + "=" + HttpConstants.METHOD_GET,
                SLING_SERVLET_METHODS + "=" + HttpConstants.METHOD_POST,
                SLING_SERVLET_EXTENSIONS + "=" + "json",
                SLING_SERVLET_PATHS + "=" + "/bin/test/clients-by-name",
        })
@ServiceDescription("list of clients by 'name'")
public class ClientsByNameServlet extends SlingAllMethodsServlet {

    private static final long serialVersionUID = 1L;

    @reference
    private ClientsByNameService clientsByNameService;

    @Override
    protected void doGet(final SlingHttpServletRequest request,

                         final SlingHttpServletResponse response) throws ServletException, IOException {

        response.setContentType("application/json");

        response.getWriter().write("{ \"hello\" : aa }");

    }

    @Override
    protected void doPost(final SlingHttpServletRequest request,
                          final SlingHttpServletResponse response) throws IOException {
        response.setContentType("application/json");
        response.getWriter().write("{ \"hello\" : aa }");
    }
}

 

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hi,

You might have issue with external services used in Servlet e.g.

@reference
    private ClientsByNameService clientsByNameService;

 

remove this reference and try.

and check the bundle, there you may see that the servlet in satisfied state



Arun Patidar

View solution in original post

4 Replies

Avatar

Community Advisor

@rute Please refer the below code which works.

@Component(service = {Servlet.class},
        property = {
                "sling.servlet.methods=" + HttpConstants.METHOD_GET,
                "sling.servlet.methods=" + HttpConstants.METHOD_POST,
                "sling.servlet.paths=" + "/bin/test/clients-by-name",
                "sling.servlet.extensions=json",               
        })
public class ClientsByNameServlet extends SlingAllMethodsServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(final SlingHttpServletRequest request,

                         final SlingHttpServletResponse response) throws ServletException, IOException {

        response.setContentType("application/json");

        response.getWriter().write("{ \"hello\" : aa }");

    }

    @Override
    protected void doPost(final SlingHttpServletRequest request,
                          final SlingHttpServletResponse response) throws IOException {
        response.setContentType("application/json");
        response.getWriter().write("{ \"hello\" : aa }");
    }
}

Ganthimathi_0-1664498335975.png

Ganthimathi_2-1664498422328.png

 

Avatar

Level 2

Thank you for your answer @Ganthimathi_R! Unfortunately I'm still getting the same error.

Avatar

Correct answer by
Community Advisor

Hi,

You might have issue with external services used in Servlet e.g.

@reference
    private ClientsByNameService clientsByNameService;

 

remove this reference and try.

and check the bundle, there you may see that the servlet in satisfied state



Arun Patidar