Fix ControlBusControllerConfiguration for FormattingConversionService

* Use `ObjectProvider<FormattingConversionService>` instead for injection
to resolve the target bean later when we check that `spring-mvc` or `spring-webflux` is present in classpath
* Fix `control-bus-controller.adoc` for `{beanName}` attribute resolution attempt
This commit is contained in:
Artem Bilan
2024-08-14 11:59:42 -04:00
parent fc9b96a26e
commit e332ce988a
2 changed files with 5 additions and 6 deletions

View File

@@ -19,7 +19,7 @@ package org.springframework.integration.http.config;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -46,18 +46,17 @@ public class ControlBusControllerConfiguration {
@Bean
ControlBusController controlBusController(ControlBusCommandRegistry controlBusCommandRegistry,
@Qualifier("mvcConversionService") FormattingConversionService conversionService) {
ObjectProvider<FormattingConversionService> conversionService) {
if (!HttpContextUtils.WEB_MVC_PRESENT && !HttpContextUtils.WEB_FLUX_PRESENT) {
LOGGER.warn("The 'IntegrationGraphController' isn't registered with the application context because" +
" there is no 'org.springframework.web.servlet.DispatcherServlet' or" +
" 'org.springframework.web.reactive.DispatcherHandler' in the classpath.");
" there is no 'spring-mvc' or 'spring-webflux' in the classpath.");
return null;
}
controlBusCommandRegistry.setEagerInitialization(true);
return new ControlBusController(controlBusCommandRegistry, conversionService);
return new ControlBusController(controlBusCommandRegistry, conversionService.getIfUnique());
}
}

View File

@@ -69,7 +69,7 @@ The `/control-bus` GET request returns all the control bus commands for the appl
Essentially, a JSON-serialized list of `ControlBusController.ControlBusBean` instances.
Each entry is a bean with a list of control bus eligible methods (see `ControlBusMethodFilter` for more information) with their parameter types and description from the `@ManagedOperation` or `@ManagedAttribute` (falls back to method name otherwise).
The GET method of this REST controller for `/control-bus/{beanName}` returns commands for specific bean.
The GET method of this REST controller for `/control-bus/\{beanName}` returns commands for specific bean.
The POST method to `/control-bus/{beanName.methodName}` invokes the command.
The body of the request may contain a list of values and their types for command to execute.