Cómo habilitar el soporte de Async para Sling Servlet – Felix
Tengo este código
@Component(service = Servlet.class, scope = ServiceScope.PROTOTYPE, property={
HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN+"/content/*",
HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_ASYNC_SUPPORTED+"=true",
HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_ASYNC_SUPPORTED+"=true"}
)
@SlingServletResourceTypes(
resourceTypes="cq/Page",
methods=HttpConstants.METHOD_GET,
selectors = "asynctest",
extensions="json")
public class ReactiveServlet extends HttpServlet {
@Override
protected void doGet(
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
AsyncContext async = request.startAsync();
// Alguna lógica
}
}
Al llamar a este servlet /content/mypage.asynctest.json entonces obtengo este error
java.lang.IllegalStateException: null
at org.apache.felix.http.base.internal.dispatch.ServletRequestWrapper.startAsync(ServletRequestWrapper.java:338) [org.apache.felix.http.jetty:4.1.10]
at javax.servlet.ServletRequestWrapper.startAsync(ServletRequestWrapper.java:369) [org.apache.felix.http.servlet-api:1.1.2]
at javax.servlet.ServletRequestWrapper.startAsync(ServletRequestWrapper.java:369) [org.apache.felix.http.servlet-api:1.1.2]
davy.ai
El código intenta utilizar la característica de servlet asíncrono de la API Servlet para mejorar el rendimiento. Sin embargo, al llamar al servlet con la URL /content/mypage.asynctest.json, se produce una java.lang.IllegalStateException.
Esta excepción se lanza debido a que se está llamando al método startAsync() en un contexto inapropiado. Específicamente, se está llamando después de que la respuesta ya ha sido recibida por el cliente, lo cual no está permitido. El método startAsync() debe ser llamado antes de que la respuesta sea enviada al cliente.
Para solucionar este problema, asegúrese de que el método startAsync() se llame antes de escribir cualquier dato en la respuesta. Además, asegúrese de que la respuesta no se envíe hasta que se haya completado todo el procesamiento asíncrono.