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

How Can I call a Service in Servlet

Avatar

Level 2

I have created a service called MyService and implemented it, I want to call it in my servlet so how can I do that? please help

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hi @ashwinikhaple 

Please see below:

 

public class MyServlet extends SlingAllMethodsServlet {

private static final long serialVersionUID = 1L;

@Reference
private transient MyService myservice;

@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {

myservice.anything();

}
}

 

https://sling.apache.org/documentation/the-sling-engine/servlets.html

 

Hope this helps!
Thanks!

View solution in original post

7 Replies

Avatar

Community Advisor

Hi, @ashwinikhaple,

 

If you are using SCR annotation, you can use @Reference annotation to inject the service into the servlet.

Something similar to this.

@Reference
MyService service;

You can refer to the below thread for more details.

https://stackoverflow.com/questions/56732548/aem-6-4-x-osgi-servlet-how-to-access-an-osgi-service-fr...

 

 If you are using R6 annotation, Please refer to below URL for the same.

http://www.nateyolles.com/blog/2017/05/osgi-declarative-services-annotations-in-aem

 

Avatar

Level 2

Hello @Rohit_Utreja Thank you for the reply. I have created servlet below how can I call MyService here?

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.HttpConstants;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;

@Component(service = Servlet.class,
property={
Constants.SERVICE_DESCRIPTION + "=My Servlet",
"sling.servlet.paths="+ "/bin/demotraining/mypath"
})
public class MyServlet extends SlingSafeMethodsServlet
{

/**
*
*/
private static final long serialVersionUID = 3444770797464227100L;
MyService ms=new MyServiceImpl();

@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException
{
response.setHeader("Content-Type","text/html");
response.getWriter().print("<h1>Sample content using Sling servlet </h1>");
response.getWriter().print("<h2>My SlingServlet is registered using servlet path</h2>");
response.getWriter().close();
}
}

Avatar

Community Advisor

Hi @ashwinikhaple,

 

import javax.servlet.Servlet;

import javax.servlet.ServletException;

import org.apache.sling.api.SlingHttpServletRequest;

import org.apache.sling.api.SlingHttpServletResponse;

import org.apache.sling.api.servlets.HttpConstants;

import org.apache.sling.api.servlets.SlingSafeMethodsServlet;

import org.osgi.framework.Constants;

import org.osgi.service.component.annotations.Component;

import org.osgi.service.component.annotations.Reference;

@Component(service = Servlet.class,

property={

Constants.SERVICE_DESCRIPTION + "=My Servlet",

"sling.servlet.paths="+ "/bin/demotraining/mypath"

})

public class MyServlet extends SlingSafeMethodsServlet

{

/**

*

*/

private static final long serialVersionUID = 3444770797464227100L;

 

 

@Reference

private MyService myService;

 

@Override

protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException

{

response.setHeader("Content-Type","text/html");

response.getWriter().print("<h1>Sample content using Sling servlet </h1>");

response.getWriter().print("<h2>My SlingServlet is registered using servlet path</h2>");

response.getWriter().close();

}

}

Avatar

Level 2

Now, I am trying to render values returned by methods that are in MyService, So to render those in servlet what can I use? 

Below is MyService Methods code

 

public interface MyService
{
public String getMyFirstName();
public String getMyLastName();
public String getMyHobby();
}

Avatar

Correct answer by
Community Advisor

Hi @ashwinikhaple 

Please see below:

 

public class MyServlet extends SlingAllMethodsServlet {

private static final long serialVersionUID = 1L;

@Reference
private transient MyService myservice;

@Override
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {

myservice.anything();

}
}

 

https://sling.apache.org/documentation/the-sling-engine/servlets.html

 

Hope this helps!
Thanks!

Avatar

Community Advisor

Kindly use like below-

 

@reference
private transient ApiService apiService;