-
Notifications
You must be signed in to change notification settings - Fork 636
Open
Description
Description
When running a Spring Cloud Function AWS application as a GraalVM native image, the application fails to start due to missing Joda-Time resources, even though the application doesn't use Joda-Time. This happens because spring-cloud-function-adapter-aws
seems to have a hard dependency on Jackson's Joda module in its JSON mapper configuration.
Environment
- Spring Boot: 3.5.6
- Spring Cloud: 2025.0.0
- Java: 21
- GraalVM: Native Image Community 21
- OS: Linux
Steps to reproduce
- Create a minimal Spring Cloud Function AWS project with these dependencies:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-adapter-aws</artifactId>
</dependency>
- Add a simple function:
@SpringBootApplication
class MyApp
fun main(args: Array<String>) {
runApplication<MyApp>(*args)
}
@Bean
fun uppercase(): Function<String, String> {
return java.util.function.Function{ value -> value.uppercase() }
}
- Compile to native image:
./mvnw -Pnative native:compile
- Run the generated native image:
./target/update-wallet
Expected behavior
The native image should run successfully.
Actual behavior
The application fails to start because spring-cloud-function-adapter-aws
attempts to configure Jackson with Joda module through ContextFunctionCatalogAutoConfiguration$JsonMapperConfiguration
:
2025-10-03T10:02:17.923-03:00 DEBUG 471539 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Creating shared instance of singleton bean 'org.springframework.cloud.function.context.config.ContextFunctionCatalogAutoConfiguration$JsonMapperConfiguration'
java.io.IOException: Resource not found: "org/joda/time/tz/data/ZoneInfoMap" ClassLoader: jdk.internal.loader.ClassLoaders$AppClassLoader@56cbfb61
at org.joda.time.tz.ZoneInfoProvider.openResource(ZoneInfoProvider.java:225)
at org.joda.time.tz.ZoneInfoProvider.<init>(ZoneInfoProvider.java:138)
at org.joda.time.tz.ZoneInfoProvider.<init>(ZoneInfoProvider.java:97)
at org.joda.time.DateTimeZone.getDefaultProvider(DateTimeZone.java:571)
at org.joda.time.DateTimeZone.getProvider(DateTimeZone.java:465)
at org.joda.time.DateTimeZone.forTimeZone(DateTimeZone.java:383)
at org.joda.time.DateTimeZone.getDefault(DateTimeZone.java:177)
at com.fasterxml.jackson.datatype.joda.cfg.FormatConfig.<clinit>(FormatConfig.java:22)
at com.fasterxml.jackson.datatype.joda.deser.DateTimeDeserializer.forType(DateTimeDeserializer.java:43)
at com.fasterxml.jackson.datatype.joda.JodaModule.<init>(JodaModule.java:20)
at org.springframework.cloud.function.context.config.ContextFunctionCatalogAutoConfiguration$JsonMapperConfiguration.jackson(ContextFunctionCatalogAutoConfiguration.java:254)
at org.springframework.cloud.function.context.config.ContextFunctionCatalogAutoConfiguration$JsonMapperConfiguration.jsonMapper(ContextFunctionCatalogAutoConfiguration.java:224)
at org.springframework.cloud.function.context.config.ContextFunctionCatalogAutoConfiguration__BeanDefinitions$JsonMapperConfiguration.lambda$getJsonMapperInstanceSupplier$0(ContextFunctionCatalogAutoConfiguration__BeanDefinitions.java:103)
is it a bug or I'm doing something wrong?
Thanks
Metadata
Metadata
Assignees
Labels
No labels