creating servlet in CQ - cannot be cast to javax.servlet.Servlet , Failed getting the service for reference | Community
Skip to main content
October 16, 2015
Solved

creating servlet in CQ - cannot be cast to javax.servlet.Servlet , Failed getting the service for reference

  • October 16, 2015
  • 14 replies
  • 6052 views
Hi all,
 

I tried the following sample program for creating servlet in CQ but getting below error in logs:

 
07.10.2013 11:27:19.156 *WARN* [OsgiInstallerImpl] org.apache.sling.servlets.resolver.internal.SlingServletResolver bindServlet: Failed getting the service for reference [javax.servlet.Servlet] java.lang.ClassCastException: com.adobe.training.core.MySafeMethodServlet cannot be cast to javax.servlet.Servlet
at org.apache.sling.servlets.resolver.internal.SlingServletResolver.createServlet(SlingServletResolver.java:974)
at org.apache.sling.servlets.resolver.internal.SlingServletResolver.bindServlet(SlingServletResolver.java:936)
 
Any reason why this is happening. Why its giving error like:
1)  Failed getting the service for reference 
2) cannot be cast to javax.servlet.Servlet
 
 
 
Below is the sample code.
-----------------------------------------------
 
package com.adobe.training.core;
import java.io.IOException;
 
 
import javax.servlet.ServletException;
import javax.servlet.Servlet;
 
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
 
@SlingServlet(paths = "/bin/company/repo" , methods = "GET")
public class MySafeMethodServlet extends SlingSafeMethodsServlet  
{
private static final long serialVersionUID = -3960692666512058118L;
 
@Override 
 
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException , IOException
{
response.setHeader("Content-Type","application/json");
response.getWriter().print("{\"coming\" : \"soon\"}");
}
}
 
This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Ojjis

Hi,
have you tried to use the @Component annotation with it like this small example:

 

@Component(immediate = true, metatype = true, name = "com.adobe.training.core.MySafeMethodServlet", label = "Safe Methd Servlet", description = " A small test servlet") @SlingServlet(methods = { "GET" }, paths = "/bin/company/repo", generateComponent = false) public class MySafeMethodServlet extends SlingSafeMethodsServlet { private static final Logger log = LoggerFactory.getLogger(MySafeMethodServlet.class); protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response){ log.info("DoGetting"); } protected void activate(ComponentContext ctx) { log.info("Activating"); } protected void deactivate(ComponentContext ctx) { log.info("Deactivating"); } }

/Johan

14 replies

New Participant
October 16, 2015

Hi Rohit, You post is helped me today to resolve the exact problem. thanks.

smacdonald2008
New Participant
October 16, 2015

My advice would be use Maven to build the Sling Servlet as specified in this community article:

http://helpx.adobe.com/adobe-cq/using/custom-sling-servlets.html

Please follow each step in this article - it includes everything you need and has got other community members up and running with Sling Servlets. You do not need to use BDN file or CRXDE. Just Maven and POM. THen deploy to Adobe CQ. In this artilce - its only pulled into Eclipse to use as IDE to modify the POM and Java files. Maven compiles the code and builds the OSGi bundle. 

October 16, 2015

Thanks both of you for quick reply. Let me try . Will let you know shortly how it goes

Ojjis
OjjisAccepted solution
New Participant
October 16, 2015

Hi,
have you tried to use the @Component annotation with it like this small example:

 

@Component(immediate = true, metatype = true, name = "com.adobe.training.core.MySafeMethodServlet", label = "Safe Methd Servlet", description = " A small test servlet") @SlingServlet(methods = { "GET" }, paths = "/bin/company/repo", generateComponent = false) public class MySafeMethodServlet extends SlingSafeMethodsServlet { private static final Logger log = LoggerFactory.getLogger(MySafeMethodServlet.class); protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response){ log.info("DoGetting"); } protected void activate(ComponentContext ctx) { log.info("Activating"); } protected void deactivate(ComponentContext ctx) { log.info("Deactivating"); } }

/Johan