Expand my Community achievements bar.

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.