Trying to use a plugin that uses spring-mvc might cause the following exception:
[INFO] [talledLocalContainer] java.lang.ClassCastException: org.springframework.web.context.request.async.WebAsyncManager cannot be cast to org.springframework.web.context.request.async.WebAsyncManager
[INFO] [talledLocalContainer] at org.springframework.web.context.request.async.WebAsyncUtils.getAsyncManager(WebAsyncUtils.java:46)
[INFO] [talledLocalContainer] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:960)
[INFO] [talledLocalContainer] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
This is due to spring-mvc setting a request attribute with the WebAsyncManager in core (using Spring3), and spring request processing in the plugin trying to reuse it and cast it to the Spring4 version, which fails.
A workaround is to declare a servlet-filter module in the plugin that will handle cleaning the request attribute before further processing:
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (request.getAttribute(WebAsyncUtils.WEB_ASYNC_MANAGER_ATTRIBUTE) != null) { request.setAttribute(WebAsyncUtils.WEB_ASYNC_MANAGER_ATTRIBUTE, null); }