Skip to content

DynamoDBLocal 1.20.0 does not work with Spring Boot 3 (ClassNotFoundException: javax.servlet.ServletInputStream) #3605

@mgr32

Description

@mgr32

Describe the bug

DynamoDBLocal-1.20.0.jar (com.amazonaws:DynamoDBLocal:1.20.0) has references to javax.servlet, making it impossible to use it with Spring Boot 3 (which requires migration to Jakarta EE 10).

Expected Behavior

Instantiating LocalDynamoDBRequestHandler in presence of Spring Boot 3 should not throw ClassNotFoundException exception.

Current Behavior

Tryng to instantiate LocalDynamoDBRequestHandler class throws the following exception:

Caused by: java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream
        at com.example.demo.DynamoDbLocalConfig.localDynamoDBServerHandler(DynamoDbLocalConfig.java:14) ~[classes/:na]
        at com.example.demo.DynamoDbLocalConfig$$SpringCGLIB$$0.CGLIB$localDynamoDBServerHandler$0(<generated>) ~[classes/:na]
        at com.example.demo.DynamoDbLocalConfig$$SpringCGLIB$$2.invoke(<generated>) ~[classes/:na]
        at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:257) ~[spring-core-6.0.2.jar:6.0.2]
        at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:331) ~[spring-context-6.0.2.jar:6.0.2]
        at com.example.demo.DynamoDbLocalConfig$$SpringCGLIB$$0.localDynamoDBServerHandler(<generated>) ~[classes/:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:139) ~[spring-beans-6.0.2.jar:6.0.2]
        ... 20 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletInputStream
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na]
        ... 31 common frames omitted

Reproduction Steps

  1. Prepare a minimal project with Spring Boot 3 (e.g. from https://start.spring.io/)
  2. Add com.amazonaws:DynamoDBLocal:1.20.0 dependency as described in the instructions
  3. Try to instantiate LocalDynamoDBRequestHandler class.

Example code that reproduces the issue: https://github.com/mgr32/dynamodblocal-spring-boot-3

Possible Solution

Update imports from javax.* to jakarta.* as described in Spring Boot 3 migration guide.

Additional Information/Context

No response

AWS Java SDK version used

2.16.46

JDK version used

17.0.4

Operating System and version

Linux Ubuntu 22.04.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions