Sling servlets doesn't work for txt extension | Community
Skip to main content
pradeepd1320668
Level 2
May 7, 2021
Solved

Sling servlets doesn't work for txt extension

  • May 7, 2021
  • 4 replies
  • 2593 views

Hi All,

 

I am using felix scr annotations. 

Sling servlet working fine for xml extension but not for txt extension.

 

Attaching servlet code for reference

@1790552()
@SlingServlet(resourceTypes = "/apps/test/components/page/blankpage",
selectors = "301",
extensions = "txt",
methods = "GET",
metatype =true)
public class TestServlet extends SlingSafeMethodsServlet {

/**
*
*/
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = LoggerFactory.getLogger(TestServlet.class);

@9944223
protected void doGet(final SlingHttpServletRequest req,
final SlingHttpServletResponse resp) throws ServletException, IOException {
LOGGER.info("Entering doGet");
resp.setContentType("text/html");
resp.getWriter().println(response);

}
}

 

Any pointers is highly appreciated.

Gone through below link, not helped anymore.

https://experienceleaguecommunities.adobe.com/t5/adobe-experience-manager/sling-servlet-txt-extension-not-working-with-osgi-ds-1-2/td-p/284729

 

 

Thanks,

Pradeep

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 Prince_Shivhare

my suggestion would be not to use the SCR annotation becasue it is depricated now.

Please use the OSGI annotations.

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

@Component(service = Servlet.class, property = {
Constants.SERVICE_DESCRIPTION + "=JSON Servlet to read the data from the external webservice",
"sling.servlet.methods=" + HttpConstants.METHOD_GET,
"sling.servlet.paths=" + "/bin/SimpleServlet"
})
public class SimpleServlet extends SlingSafeMethodsServlet {

4 replies

Asutosh_Jena_
Community Advisor
Community Advisor
May 7, 2021

Hi @pradeepd1320668 

 

Please use the below code:

@Component(service = Servlet.class, property = {"process.label=Some Servlet",
Constants.SERVICE_DESCRIPTION + "=Some Servlet"})
@@SlingServletResourceType(resourceTypes = "test/components/page/blankpage",
methods = HttpConstants.METHOD_GET,
extensions = "txt",
selectors = "something")
public class TestServlet extends SlingSafeMethodsServlet {
//Rest of code
}

Here is a detailed exampale with video:

http://www.sgaemsolutions.com/2017/12/apache-sling-servlets-and-scripts.html

 

Make sure the resource you are accessing has the sling:resourceType as "test/components/page/blankpage".

 

Let's say you are accessing /content/mywebsite/abc/jcr:content.something.txt then abc page jcr:content should have the above property as sling:resourceType

Hope this will help!

Thanks

Asutosh_Jena_
Community Advisor
Community Advisor
May 10, 2021

Hi @pradeepd1320668 

 

OSGi DS 1.4 (R7) component property type annotations for Sling Servlets uses @SlingServletResourceTypes

 

Need to add the below dependency:

<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.servlets.annotations</artifactId>
<version>1.2.4</version>
</dependency>

Please see link below:

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

 

Thanks

Kiran_Vedantam
Community Advisor
Community Advisor
May 7, 2021

Hi @pradeepd1320668,

 

Can you please use the latest OSGI declarative services annotations [R7]  annotations like this:

@Component(service = Servlet.class,
property = {
"sling.servlet.methods=" + HttpConstants.METHOD_GET,
"sling.servlet.resourceTypes=" + ADD THE RESOURCE TYPE,
"sling.servlet.selectors=ADD SELECTORS",
"sling.servlet.extensions=txt",
"service.ranking:Integer=ADD THE RANKING"
})

 

Hope this helps!

 

Thanks,

Kiran Vedantam

Prince_Shivhare
Community Advisor
Prince_ShivhareCommunity AdvisorAccepted solution
Community Advisor
May 7, 2021

my suggestion would be not to use the SCR annotation becasue it is depricated now.

Please use the OSGI annotations.

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

@Component(service = Servlet.class, property = {
Constants.SERVICE_DESCRIPTION + "=JSON Servlet to read the data from the external webservice",
"sling.servlet.methods=" + HttpConstants.METHOD_GET,
"sling.servlet.paths=" + "/bin/SimpleServlet"
})
public class SimpleServlet extends SlingSafeMethodsServlet {
BrianKasingli
Community Advisor and Adobe Champion
Community Advisor and Adobe Champion
May 7, 2021

Here's an example of working code with

@8220494(service = { Servlet.class }) @SlingServletResourceTypes( resourceTypes="/apps/my/type", methods= "GET", extensions="txt", selectors="hello") public class MyServlet extends SlingSafeMethodsServlet { @9944223 protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException { ... } }

txt:

 

pradeepd1320668
Level 2
May 10, 2021

I could not find @SlingServletResourceTypes annotation. Can you please share complete servlet code?