Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UnsupportedOperationException from AwsServletContext.getNamedDispatcher #499

Closed
Artur- opened this issue Dec 16, 2022 · 5 comments · Fixed by #502
Closed

UnsupportedOperationException from AwsServletContext.getNamedDispatcher #499

Artur- opened this issue Dec 16, 2022 · 5 comments · Fixed by #502

Comments

@Artur-
Copy link
Contributor

Artur- commented Dec 16, 2022

Serverless Java Container version: 1.9.1

Implementations: Spring Boot 2

Framework version: SpringBoot 2.7.5

Frontend service: HTTP API

Deployment method: SAM

Scenario

Trying to get a https://hilla.dev/ Spring Boot 2 application up and running

Expected behavior

A request to the application ends up in the deployed servlet

Actual behavior

Every request fails with

Caused by: java.lang.UnsupportedOperationException: null
--
  | 2022-12-16T09:44:18.518+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.AwsServletContext.getNamedDispatcher(AwsServletContext.java:174) ~[task/:na]
  | 2022-12-16T09:44:18.518+02:00 | at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:127) ~[task/:na]
  | 2022-12-16T09:44:18.518+02:00 | at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[task/:na]
  | 2022-12-16T09:44:18.518+02:00 | at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51) ~[task/:na]
  | 2022-12-16T09:44:18.518+02:00 | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071) ~[task/:na]
  | 2022-12-16T09:44:18.518+02:00 | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964) ~[task/:na]
  | 2022-12-16T09:44:18.518+02:00 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[task/:na]

This originates in ServletForwardingController which does

	protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		ServletContext servletContext = getServletContext();
		Assert.state(servletContext != null, "No ServletContext");
		RequestDispatcher rd = servletContext.getNamedDispatcher(this.servletName);
		if (rd == null) {
			throw new ServletException("No servlet with name '" + this.servletName + "' defined in web.xml");
		}
...

Am I holding it wrong as it seems this can never work as getNamedDispatcher in AwsServletContext always throws an exception?

Steps to reproduce

Example project is at https://github.com/Artur-/hilla-react-lambda

Full log output



2022-12-16T10:56:18.641+02:00 | START RequestId: 78cce961-568c-4604-8442-ece5862376cc Version: $LATEST
-- | --
  | 2022-12-16T10:56:18.652+02:00 | 2022-12-16 08:56:18.645 ERROR 8 --- [ main] c.a.s.p.internal.LambdaContainerHandler : Error while handling request
  | 2022-12-16T10:56:18.652+02:00 | org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.UnsupportedOperationException
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainManager$ServletExecutionFilter.doFilter(FilterChainManager.java:356) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler.doFilter(AwsLambdaServletContainerHandler.java:156) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler.handleRequest(SpringBootLambdaContainerHandler.java:180) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler.handleRequest(SpringBootLambdaContainerHandler.java:53) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxy(LambdaContainerHandler.java:214) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxyStream(LambdaContainerHandler.java:257) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.example.application.LambdaHandler.handleRequest(LambdaHandler.java:29) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
  | 2022-12-16T10:56:18.652+02:00 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
  | 2022-12-16T10:56:18.652+02:00 | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
  | 2022-12-16T10:56:18.652+02:00 | at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[na:na]
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.EventHandlerLoader$StreamMethodRequestHandler.handleRequest(EventHandlerLoader.java:375) ~[aws-lambda-java-runtime-0.2.0.jar:na]
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.EventHandlerLoader$2.call(EventHandlerLoader.java:899) ~[aws-lambda-java-runtime-0.2.0.jar:na]
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:268) ~[aws-lambda-java-runtime-0.2.0.jar:na]
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:206) ~[aws-lambda-java-runtime-0.2.0.jar:na]
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.AWSLambda.main(AWSLambda.java:200) ~[aws-lambda-java-runtime-0.2.0.jar:na]
  | 2022-12-16T10:56:18.652+02:00 | Caused by: java.lang.UnsupportedOperationException: null
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.AwsServletContext.getNamedDispatcher(AwsServletContext.java:174) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:127) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | ... 30 common frames omitted
  | 2022-12-16T10:56:18.652+02:00 | 2022-12-16 08:56:18.645 ERROR 8 --- [ main] c.a.s.proxy.AwsProxyExceptionHandler : Called exception handler for:
  | 2022-12-16T10:56:18.652+02:00 | org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.UnsupportedOperationException
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:645) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainManager$ServletExecutionFilter.doFilter(FilterChainManager.java:356) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler.doFilter(AwsLambdaServletContainerHandler.java:156) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler.handleRequest(SpringBootLambdaContainerHandler.java:180) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler.handleRequest(SpringBootLambdaContainerHandler.java:53) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxy(LambdaContainerHandler.java:214) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxyStream(LambdaContainerHandler.java:257) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at com.example.application.LambdaHandler.handleRequest(LambdaHandler.java:29) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
  | 2022-12-16T10:56:18.652+02:00 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
  | 2022-12-16T10:56:18.652+02:00 | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:na]
  | 2022-12-16T10:56:18.652+02:00 | at java.base/java.lang.reflect.Method.invoke(Unknown Source) ~[na:na]
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.EventHandlerLoader$StreamMethodRequestHandler.handleRequest(EventHandlerLoader.java:375) ~[aws-lambda-java-runtime-0.2.0.jar:na]
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.EventHandlerLoader$2.call(EventHandlerLoader.java:899) ~[aws-lambda-java-runtime-0.2.0.jar:na]
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:268) ~[aws-lambda-java-runtime-0.2.0.jar:na]
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:206) ~[aws-lambda-java-runtime-0.2.0.jar:na]
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.AWSLambda.main(AWSLambda.java:200) ~[aws-lambda-java-runtime-0.2.0.jar:na]
  | 2022-12-16T10:56:18.652+02:00 | Caused by: java.lang.UnsupportedOperationException: null
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.AwsServletContext.getNamedDispatcher(AwsServletContext.java:174) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:127) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[task/:na]
  | 2022-12-16T10:56:18.652+02:00 | ... 30 common frames omitted
  | 2022-12-16T10:56:18.652+02:00 | org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.UnsupportedOperationException
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
  | 2022-12-16T10:56:18.652+02:00 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:645)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
  | 2022-12-16T10:56:18.652+02:00 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainManager$ServletExecutionFilter.doFilter(FilterChainManager.java:356)
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler.doFilter(AwsLambdaServletContainerHandler.java:156)
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler.handleRequest(SpringBootLambdaContainerHandler.java:180)
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler.handleRequest(SpringBootLambdaContainerHandler.java:53)
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxy(LambdaContainerHandler.java:214)
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.LambdaContainerHandler.proxyStream(LambdaContainerHandler.java:257)
  | 2022-12-16T10:56:18.652+02:00 | at com.example.application.LambdaHandler.handleRequest(LambdaHandler.java:29)
  | 2022-12-16T10:56:18.652+02:00 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  | 2022-12-16T10:56:18.652+02:00 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  | 2022-12-16T10:56:18.652+02:00 | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  | 2022-12-16T10:56:18.652+02:00 | at java.base/java.lang.reflect.Method.invoke(Unknown Source)
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.EventHandlerLoader$StreamMethodRequestHandler.handleRequest(EventHandlerLoader.java:375)
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.EventHandlerLoader$2.call(EventHandlerLoader.java:899)
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:268)
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:206)
  | 2022-12-16T10:56:18.652+02:00 | at lambdainternal.AWSLambda.main(AWSLambda.java:200)
  | 2022-12-16T10:56:18.652+02:00 | Caused by: java.lang.UnsupportedOperationException
  | 2022-12-16T10:56:18.652+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.AwsServletContext.getNamedDispatcher(AwsServletContext.java:174)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:127)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964)
  | 2022-12-16T10:56:18.652+02:00 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
  | 2022-12-16T10:56:18.652+02:00 | ... 30 more
  | 2022-12-16T10:56:18.653+02:00 | END RequestId: 78cce961-568c-4604-8442-ece5862376cc


@deki
Copy link
Collaborator

deki commented Dec 19, 2022

You are right, getNamedDispatcher is not implemented right now.
We could try using new AwsProxyRequestDispatcher(s, true, containerHandler); instead of throwing the UnsupportedOperationException.

@Artur-
Copy link
Contributor Author

Artur- commented Jan 30, 2023

If getNamedDispatcher is implemented as

return new AwsProxyRequestDispatcher(s, true, containerHandler);

then the stacktrace looks like



at com.amazonaws.serverless.proxy.internal.servlet.FilterChainManager$ServletExecutionFilter.doFilter(FilterChainManager.java:356)
--
  | 2023-01-30T10:40:18.566+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2023-01-30T10:40:18.566+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)
  | 2023-01-30T10:40:18.566+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2023-01-30T10:40:18.566+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)
  | 2023-01-30T10:40:18.566+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2023-01-30T10:40:18.566+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)
  | 2023-01-30T10:40:18.566+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2023-01-30T10:40:18.566+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler.doFilter(AwsLambdaServletContainerHandler.java:156)
  | 2023-01-30T10:40:18.566+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.AwsProxyRequestDispatcher.forward(AwsProxyRequestDispatcher.java:83)
  | 2023-01-30T10:40:18.566+02:00 | at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141)
  | 2023-01-30T10:40:18.566+02:00 | at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
  | 2023-01-30T10:40:18.566+02:00 | at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
  | 2023-01-30T10:40:18.567+02:00 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
  | 2023-01-30T10:40:18.567+02:00 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
  | 2023-01-30T10:40:18.567+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainManager$ServletExecutionFilter.doFilter(FilterChainManager.java:356)
  | 2023-01-30T10:40:18.567+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)
  | 2023-01-30T10:40:18.567+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)
  | 2023-01-30T10:40:18.567+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)
  | 2023-01-30T10:40:18.567+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2023-01-30T10:40:18.567+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler.doFilter(AwsLambdaServletContainerHandler.java:156)
  | 2023-01-30T10:40:18.567+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.AwsProxyRequestDispatcher.forward(AwsProxyRequestDispatcher.java:83)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
  | 2023-01-30T10:40:18.567+02:00 | at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
  | 2023-01-30T10:40:18.567+02:00 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
  | 2023-01-30T10:40:18.568+02:00 | at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
  | 2023-01-30T10:40:18.568+02:00 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
  | 2023-01-30T10:40:18.568+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainManager$ServletExecutionFilter.doFilter(FilterChainManager.java:356)
  | 2023-01-30T10:40:18.568+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2023-01-30T10:40:18.568+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)
  | 2023-01-30T10:40:18.568+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2023-01-30T10:40:18.568+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)
  | 2023-01-30T10:40:18.568+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2023-01-30T10:40:18.568+02:00 | at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:111)
  | 2023-01-30T10:40:18.568+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.FilterChainHolder.doFilter(FilterChainHolder.java:90)
  | 2023-01-30T10:40:18.568+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler.doFilter(AwsLambdaServletContainerHandler.java:156)
  | 2023-01-30T10:40:18.568+02:00 | at com.amazonaws.serverless.proxy.internal.servlet.AwsProxyRequestDispatcher.forward(AwsProxyRequestDispatcher.java:83)
  | 2023-01-30T10:40:18.568+02:00 | at org.springframework.web.servlet.mvc.ServletForwardingController.handleRequestInternal(ServletForwardingController.java:141)
  | 2023-01-30T10:40:18.568+02:00 | at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:177)
  | 2023-01-30T10:40:18.568+02:00 | at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:51)
  | 2023-01-30T10:40:18.568+02:00 | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1071)
  | 2023-01-30T10:40:18.568+02:00 | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:964)
  | 2023-01-30T10:40:18.568+02:00 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
  | 2023-01-30T10:40:18.568+02:00 | at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
  | 2023-01-30T10:40:18.568+02:00 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
  | 2023-01-30T10:40:18.568+02:00 | at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
  | 2023-01-30T10:40:18.568+02:00 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

so it seems like there is an infinite loop and that the AwsProxyRequestDispatcher calls the dispatcher servlet again and again instead of calling the named servlet. Probably because forward is implemented as

        if (isNamedDispatcher) {
            lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, getServlet((HttpServletRequest)servletRequest));
            return;
        }

so it will not use the servlet name stored in dispatchTo

@Artur-
Copy link
Contributor Author

Artur- commented Jan 30, 2023

The biggest problem seems to be the lack of servlet support. With these hacks, I was able to at least get the servlet deployed and one request to go through main...Artur-:aws-serverless-java-container:main

@deki
Copy link
Collaborator

deki commented Jan 30, 2023

Thanks for the feedback. Yes, the implementation is not complete. We wouldn't pass the TCK but it's sufficient for most of the use cases. Would you mind adding a few test cases and opening a PR? I'm happy to merge the changes and include them in the next release.

@Artur-
Copy link
Contributor Author

Artur- commented Jan 30, 2023

I will do that once I get everything working first (unless I forget..)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants