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

Cannot get @SlingServlet from AEM project -DarchetypeVersion=11

Avatar

Level 1

Hi all,

I have been created the AEM project with -DarchetypeVersion=11 and create the first servlet demo like below:

s1.PNG

I try to get the result by enter http://localhost:4502/my-demo/servlet but the resource is not found. Please advise me

1 Accepted Solution

Avatar

Correct answer by
Level 10

See this article - we cover that here: Creating a Mail List Sign Up Component for the Experience Manager Toy Store Site

The reason why I pointed you to this article is because you wanted to know why @SlingServlet did not work.

An important aspect to notice is the change on how an AEM Servlet is created. There is no longer @Service or @SlingServlet annotations in the org.osgi.service.component.annotations package.

In Maven Archetype 10 project, you defined a servlet like this:

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

public class HandleClaim extends org.apache.sling.api.servlets.SlingAllMethodsServlet {

private static final long serialVersionUID = 2598426539166789515L;

However, in a Maven Archetype 11 project., you define an AEM Servlet like this (there is no @SlingServlet annotation):

@Component(service=Servlet.class,

property={

Constants.SERVICE_DESCRIPTION + "=Simple Demo Servlet",

"sling.servlet.methods=" + HttpConstants.METHOD_POST,

"sling.servlet.paths="+ "/bin/myDataSourcePoolServlet"

})

View solution in original post

8 Replies

Avatar

Employee

should you not have: "/my-demo/servlet". to me you are missing the first /

Avatar

Level 1

Thanks for your reply. I try to add "/" and the issue still happens. but I add bin/my-demo/servlet, I can get th result. Could you please tell me why put the 'bin' on paths ?

Avatar

Correct answer by
Level 10

See this article - we cover that here: Creating a Mail List Sign Up Component for the Experience Manager Toy Store Site

The reason why I pointed you to this article is because you wanted to know why @SlingServlet did not work.

An important aspect to notice is the change on how an AEM Servlet is created. There is no longer @Service or @SlingServlet annotations in the org.osgi.service.component.annotations package.

In Maven Archetype 10 project, you defined a servlet like this:

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

public class HandleClaim extends org.apache.sling.api.servlets.SlingAllMethodsServlet {

private static final long serialVersionUID = 2598426539166789515L;

However, in a Maven Archetype 11 project., you define an AEM Servlet like this (there is no @SlingServlet annotation):

@Component(service=Servlet.class,

property={

Constants.SERVICE_DESCRIPTION + "=Simple Demo Servlet",

"sling.servlet.methods=" + HttpConstants.METHOD_POST,

"sling.servlet.paths="+ "/bin/myDataSourcePoolServlet"

})

Avatar

Level 1

Thanks for this article...To resolved the issue above, I change the "/my-demo/servlet" to "bin/my-demo/servlet". But why must we start with "bin" on paths, I continue to research. Thanks all

Avatar

Employee

You need to whitelist the path, bin is already done.

Should be in the logmessages too

Avatar

Level 1

Do we have an an article to introduce how to create the whitelist of path?

Avatar

Level 10

We have a FAQ on setting a whitelist for an OSGi that lets you set a service that uses admin creds. See this blog. Scott's Digital Community: Adobe Experience Manager FAQs and other Tips

there is a whitelist setting under Configurations. See the FAQ. Search whitelist in the blog item.