When using Freemarker as a view renderer, I get this exception:
org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'spring.freemarker' to org.springframework.boot.autoconfigure.freemarker.FreeMarkerTemplateAvailabilityProvider$FreeMarkerTemplateAvailabilityProperties
at org.springframework.boot.context.properties.bind.Binder.handleBindError(Binder.java:387) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:347) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:332) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.context.properties.bind.Binder.bindOrCreate(Binder.java:324) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.context.properties.bind.Binder.bindOrCreate(Binder.java:293) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.context.properties.bind.Binder.bindOrCreate(Binder.java:278) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.autoconfigure.template.PathBasedTemplateAvailabilityProvider.isTemplateAvailable(PathBasedTemplateAvailabilityProvider.java:56) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.autoconfigure.template.TemplateAvailabilityProviders.findProvider(TemplateAvailabilityProviders.java:151) ~[na:na]
at org.springframework.boot.autoconfigure.template.TemplateAvailabilityProviders.getProvider(TemplateAvailabilityProviders.java:139) ~[na:na]
at org.springframework.boot.autoconfigure.template.TemplateAvailabilityProviders.getProvider(TemplateAvailabilityProviders.java:114) ~[na:na]
at org.springframework.boot.autoconfigure.web.reactive.WelcomePageRouterFunctionFactory.welcomeTemplateExists(WelcomePageRouterFunctionFactory.java:75) ~[na:na]
at org.springframework.boot.autoconfigure.web.reactive.WelcomePageRouterFunctionFactory.<init>(WelcomePageRouterFunctionFactory.java:52) ~[na:na]
at org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration$WelcomePageConfiguration.welcomePageRouterFunctionMapping(WebFluxAutoConfiguration.java:128) ~[freemarker-webflux:na]
at org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration_WelcomePageConfiguration__BeanDefinitions.lambda$getWelcomePageRouterFunctionMappingInstanceSupplier$0(WebFluxAutoConfiguration_WelcomePageConfiguration__BeanDefinitions.java:31) ~[na:na]
at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:68) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.util.function.ThrowingBiFunction.apply(ThrowingBiFunction.java:54) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.aot.BeanInstanceSupplier.get(BeanInstanceSupplier.java:210) ~[na:na]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1225) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1210) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1157) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:567) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:527) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:662) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1295) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.BeanFactoryUtils.beansOfTypeIncludingAncestors(BeanFactoryUtils.java:368) ~[na:na]
at org.springframework.web.reactive.DispatcherHandler.initStrategies(DispatcherHandler.java:120) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.web.reactive.DispatcherHandler.setApplicationContext(DispatcherHandler.java:115) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.context.support.ApplicationContextAwareProcessor.invokeAwareInterfaces(ApplicationContextAwareProcessor.java:109) ~[na:na]
at org.springframework.context.support.ApplicationContextAwareProcessor.postProcessBeforeInitialization(ApplicationContextAwareProcessor.java:85) ~[na:na]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:426) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1746) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:605) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:527) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:930) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:926) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:592) ~[freemarker-webflux:6.0.0-SNAPSHOT]
at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.refresh(ReactiveWebServerApplicationContext.java:66) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:731) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:430) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at com.example.freemarker.webflux.FreemarkerWebFluxApplication.main(FreemarkerWebFluxApplication.java:13) ~[freemarker-webflux:na]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.boot.autoconfigure.freemarker.FreeMarkerTemplateAvailabilityProvider$FreeMarkerTemplateAvailabilityProperties]: No default constructor found
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:146) ~[na:na]
at org.springframework.boot.context.properties.bind.JavaBeanBinder.create(JavaBeanBinder.java:67) ~[na:na]
at org.springframework.boot.context.properties.bind.Binder.create(Binder.java:369) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.context.properties.bind.Binder.handleBindResult(Binder.java:358) ~[freemarker-webflux:3.0.0-SNAPSHOT]
at org.springframework.boot.context.properties.bind.Binder.bind(Binder.java:344) ~[freemarker-webflux:3.0.0-SNAPSHOT]
... 49 common frames omitted
Caused by: java.lang.NoSuchMethodException: org.springframework.boot.autoconfigure.freemarker.FreeMarkerTemplateAvailabilityProvider$FreeMarkerTemplateAvailabilityProperties.<init>()
at java.lang.Class.getConstructor0(DynamicHub.java:3585) ~[freemarker-webflux:na]
at java.lang.Class.getDeclaredConstructor(DynamicHub.java:2754) ~[freemarker-webflux:na]
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141) ~[na:na]
... 53 common frames omitted
We can use the https://github.com/spring-projects/spring-aot-smoke-tests/tree/main/freemarker-webflux for debugging / verification for the fix.
Comment From: mhalbritter
Now the sample fails with an exception related to missing 3rd party hints. I've created https://github.com/oracle/graalvm-reachability-metadata/issues/38 for that.