Skip to content

Application fails at runtime due to missing Joda-Time dependency in GraalVM native image #1305

@josemarflausino

Description

@josemarflausino

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

  1. 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>
  1. 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() }
}
  1. Compile to native image:
./mvnw -Pnative native:compile
  1. 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

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions