Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

SOLVED

How to call sling servlet directly using it's path?

GK-AEM
Level 9
Level 9

Hi All,

I have written sling servlet and i want to check if it's working propelrly.

Before including in component and i want to check whether it's returning data properly.

I heard we can call from browser and check the same.

Can some one help how to execute like this

Thanks,

Kishore

1 Accepted Solution
Opkar_Gill
Correct answer by
Employee
Employee

Hi Kishore,

Why are you declaring it as a service and a component? Try and create a simple servlet and see if that works.

I don't see the declaration for it being a servlet e.g.

@SlingServlet(paths="/bin/mySearchServlet", methods = "GET", metatype=true)

Regards,

Opkar

[1https://helpx.adobe.com/experience-manager/using/custom-sling-servlets.html

View solution in original post

4 Replies
GK-AEM
Level 9
Level 9

i am calling in the same way but 404 is coming.

My Servlet code looks as below.


@Component(name = "com.symantec.elibrary.core.servlets.ProductManagementServlet", label = "Product Management servlet", description = "This servlet filters the doctypes", specVersion = "1.1", metatype = true, immediate = true, policy = ConfigurationPolicy.REQUIRE)
@Service
@Properties({
        @Property(name = "service.description", value = "Symantec ProductManagementServlet Service"),
        @Property(name = "service.vendor", value = "Symantec Corporation."),
        @Property(name = "sling.servlet.paths", value = "/c/symantec/servlets/ConnectToSABA", propertyPrivate = true),
        @Property(name = "sling.servlet.methods", value = "GET", propertyPrivate = true)})

 

public class ProductManagementServlet extends SlingAllMethodsServlet{
    private static final long serialVersionUID = 1L;
    
    /** Default log. */
    protected final Logger log = LoggerFactory.getLogger(ProductManagementServlet.class);
    /**
     * The set of argument type classes for the reflection method calls.
     */

    @SuppressWarnings("rawtypes")
    protected static final Class[] parameterTypes = { SlingHttpServletRequest.class, SlingHttpServletResponse.class };
    
    public void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException,
                IOException {
        
        try {
            response.setContentType("application/json");
            JSONObject jsonObj = new JSONObject();
            jsonObj.put("Key1", "Value1");
            
            response.getWriter().print(jsonObj.toString());
            
        }catch (Exception e) {
            log.error("Exception in doGdet() method", e);
            return;
        }
        
    }
    

    /**
     * This method is called the OSGI framework when the bundle is activated. It
     * reads the properties from the component context.
     * 
     * @param componentContext
     */

    @SuppressWarnings("rawtypes")
    public void activate(ComponentContext componentContext) {
        log.debug("Entering activate method.");
        Dictionary properties = componentContext.getProperties();
        if (null != properties) {
            // /
        }
        log.debug("Exiting activate method.");
    }

    /**
     * 
     * @param componentContext
     * @throws RepositoryException
     */

    protected void deactivate(ComponentContext componentContext) {
        log.debug("Entering deactivate method.");
        log.debug("Exiting deactivate method.");
    }


}

Thanks.

Kishore

Opkar_Gill
Correct answer by
Employee
Employee

Hi Kishore,

Why are you declaring it as a service and a component? Try and create a simple servlet and see if that works.

I don't see the declaration for it being a servlet e.g.

@SlingServlet(paths="/bin/mySearchServlet", methods = "GET", metatype=true)

Regards,

Opkar

[1https://helpx.adobe.com/experience-manager/using/custom-sling-servlets.html