The GitHub Actions job "CI - Groovy Joint Validation Build" on grails-core.git/fix/urlmappings-factory-bean-object-type-8.0.x has failed. Run started by GitHub user codeconsole (triggered by codeconsole).
Head commit for run: 9a472722b0940aa9c7cedd2db5b96effd2606b56 / Scott Murphy Heiberg <[email protected]> Declare what the url-mapping factory beans produce, so nothing is created to find out In development, every message bundle contributed by a plugin, and every base name an application configured itself, silently failed to resolve. Spring Boot's messageSource was built with only the default base name, and nothing warned. The produced type of a factory bean has to be answerable from the bean definition, because a property value cannot be. Asked for the type of grailsUrlMappingsHolder without it, Spring builds a constructor-only ProxyFactoryBean - no property values applied, so no targetSource and no proxyInterfaces - whose getObjectType() returns null, and then falls back to creating the factory bean in full. That resolves the target source and the inner UrlMappingsHolderFactoryBean, evaluates every mapping, reaches the constraints machinery and its List<MessageSource> injection, and so creates Spring Boot's message source - all while bean definition registry post processors are still running. Anything created that early misses ConfigurationPropertiesBindingPostProcessor, so MessageSourceProperties is never bound and keeps its constructor defaults. Not just the base names: encoding, cache-duration and fallback-to-system-locale are lost with it. Only the reload branch built the proxy over an inner bean, so deployed applications were unaffected and the whole of development was not. Each factory-bean definition now declares its produced type through FactoryBean.OBJECT_TYPE_ATTRIBUTE, which Spring consults before instantiating anything. Reload mode is also switched off when running generated bean definitions, since AOT code generation drops custom definition attributes and hot-swapping mappings is meaningless in an image. The regression test issues the eager by-type lookup directly against a bare DefaultListableBeanFactory, so it reproduces with no Grails runtime and no ordering luck: it asserts the holder is still found by type, and that nothing was created in order to answer. Report URL: https://github.com/apache/grails-core/actions/runs/32315879656 With regards, GitHub Actions via GitBox
