Customized Rendition Servlet
Hi All,
We have a customized rendition servlet running fine on 6.0, but fails to run on 6.5 due to the Sling servlet spec changes. According to Apache Sling(https://sling.apache.org/documentation/the-sling-engine/servlets.html), either servlet's paths or resourceTypes must be defined in order for the servlet to take effect. I just define the resourceTypes in the servlet.
AEM 6.0 code:
// SCR annotations
@SlingServlet(selectors = {"preset", "precrop"}, extensions = {"xjpeg", "jpeg", "png"}, methods = {"GET"}, resourceTypes = {"sling/servlet/default"})
public class ImagePresetRenderingServlet extends SlingSafeMethodsServlet {
@Activate
protected void activate() throws Exception {
log.info("ImagePresetRendering--> activating!");
}
@9944223
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
log.trace(some resource info here);
}
}// end clas
AEM 6.5 code:
// OSGI annotations
@Component(service=Servlet.class,
property={
"sling.servlet.methods=" + HttpConstants.METHOD_GET,
"sling.servlet.extensions=xjpeg",
"sling.servlet.extension=jpeg",
"sling.servlet.extension=png",
"sling.servlet.selectors=preset",
"sling.servlet.selectors=precrop",
"sling.servlet.resourceTypes="+"sling/servlet/default"
}
)
public class ImagePresetRenderingServlet extends SlingSafeMethodsServlet {
@Activate
protected void activate() throws Exception {
log.info("ImagePresetRendering--> activating!");
}
@9944223
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException {
log.trace(some resource info here);
}
}// end class
There is implmentation code in both, just simplying it. When I try to get the preset kanbar-thumb_sml.jpg.preset.three-two.jpeg, it has been working in 6.0, but in 6.5 I am getting an error:
....
....
5854 TIMER_END{5836,handleSecurity} authenticator org.apache.sling.auth.core.impl.SlingAuthenticator@119b1d86 returns true 6394 TIMER_START{ResourceResolution} 6730 TIMER_END{333,ResourceResolution} URI=/content/dam/tisch/Homepage/kanbar-thumb_sml.jpg.preset.three-two.jpeg resolves to Resource=JcrNodeResource, type=dam:Asset, superType=null, path=/content/dam/tisch/Homepage/kanbar-thumb_sml.jpg 6753 LOG Resource Path Info: SlingRequestPathInfo: path='/content/dam/tisch/Homepage/kanbar-thumb_sml.jpg', selectorString='preset.three-two', extension='jpeg', suffix='null' 6754 TIMER_START{ServletResolution} 6762 TIMER_START{resolveServlet(/content/dam/tisch/Homepage/kanbar-thumb_sml.jpg)} 9371 TIMER_END{2606,resolveServlet(/content/dam/tisch/Homepage/kanbar-thumb_sml.jpg)} Using servlet com.day.cq.dam.core.impl.servlet.BinaryProviderServlet 9382 TIMER_END{2626,ServletResolution} URI=/content/dam/tisch/Homepage/kanbar-thumb_sml.jpg.preset.three-two.jpeg handled by Servlet=com.day.cq.dam.core.impl.servlet.BinaryProviderServlet 9389 LOG Applying Requestfilters 9399 LOG Calling filter: com.adobe.granite.resourceresolverhelper.impl.ResourceResolverHelperImpl 9413 LOG Calling filter: org.apache.sling.security.impl.ContentDispositionFilter
....
12608 TIMER_END{34,resolveServlet(/content/dam/tisch/Homepage/kanbar-thumb_sml.jpg/jcr:content/renditions/original)} Using servlet org.apache.sling.servlets.get.DefaultGetServlet
12617 LOG Applying Forwardfilters
It always goes to BinaryProviderServlet first, then get.DefaultGetServlet in 6.5. In the log file, I can see the activate() method is called, not the doGet(...). My customized servlet is ignored. Am I missing any configuration in /system/console? Any help will be appreciated!
-kt