NoClassDefFoundError for HandlerTimeoutHandlerEnhancerDefinition after upgrading to Axon 4.11.2

Hi,

I’ve recently upgraded from Axon Framework 4.10.1 to 4.11.2, using Java 17 and Spring Boot 3.1.4.

After the upgrade, my application fails to start with the following error:

java.lang.IllegalStateException: Failed to introspect Class [org.axonframework.springboot.autoconfig.AxonTimeoutAutoConfiguration] from ClassLoader [jdk.internal.loader.ClassLoaders$AppClassLoader@1d44bcfa]
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:483)
	at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:360)
	at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:417)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.lambda$getTypeForFactoryMethod$1(AbstractAutowireCapableBeanFactory.java:748)
	at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:747)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:680)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:651)
	at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1630)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:560)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:532)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:659)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:651)
	at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1304)
	at org.springframework.boot.SpringApplication.getExitCodeFromMappedException(SpringApplication.java:870)
	at org.springframework.boot.SpringApplication.getExitCodeFromException(SpringApplication.java:858)
	at org.springframework.boot.SpringApplication.handleExitCode(SpringApplication.java:845)
	at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:785)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:328)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1309)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1298)
	at com.softilys.prev.dc.Application.main(Application.java:47)
Caused by: java.lang.NoClassDefFoundError: org/axonframework/messaging/timeout/HandlerTimeoutHandlerEnhancerDefinition
	at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
	at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3402)
	at java.base/java.lang.Class.getDeclaredMethods(Class.java:2504)
	at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:465)
	... 21 common frames omitted
Caused by: java.lang.ClassNotFoundException: org.axonframework.messaging.timeout.HandlerTimeoutHandlerEnhancerDefinition
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
	... 25 common frames omitted

It seems like AxonTimeoutAutoConfiguration tries to reference a class that is not on the classpath.

I only have the following Axon dependency declared:

    <dependency>
        <groupId>org.axonframework</groupId>
        <artifactId>axon-configuration</artifactId>
        <version>4.11.2</version>
    </dependency>
    <dependency>
        <groupId>org.axonframework</groupId>
        <artifactId>axon-spring-boot-starter</artifactId>
        <version>4.11.2</version>
    </dependency>
    <dependency>
        <groupId>org.axonframework.extensions.mongo</groupId>
        <artifactId>axon-mongo-spring-boot-starter</artifactId>
        <version>4.11.1</version>
    </dependency>
    <dependency>
        <groupId>org.axonframework.extensions.reactor</groupId>
        <artifactId>axon-reactor-spring-boot-starter</artifactId>
        <version>4.11.0</version>
    </dependency>

That’s a curious wiring issue you’re having, @Aymen_Kanzari.
Although I wouldn’t think it necessary with the dependencies you have set, you might try to add the axon-messaging dependency directly. Perhaps something’s amiss because of how it’s transitively referred to right now.