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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions