Skip to content

Commit 7042d1f

Browse files
committed
Rework shellConversionService
- Replace old ConversionService impl with something more aligned with current boot code with partially shameless copy as shell is most likely working outside of web or webflux env by creating FormattingConversionService and hooking convertes from DefaultConversionService. - This should work on most cases and giving user a hook to define their own service.
1 parent 58792bc commit 7042d1f

File tree

3 files changed

+15
-23
lines changed

3 files changed

+15
-23
lines changed

spring-shell-autoconfigure/src/main/java/org/springframework/shell/boot/ParameterResolverAutoConfiguration.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import java.util.stream.Collectors;
55

66
import org.springframework.beans.factory.ObjectProvider;
7-
import org.springframework.beans.factory.annotation.Qualifier;
87
import org.springframework.context.annotation.Bean;
98
import org.springframework.context.annotation.Configuration;
109
import org.springframework.core.convert.ConversionService;
@@ -16,7 +15,7 @@
1615
public class ParameterResolverAutoConfiguration {
1716

1817
@Bean
19-
public ParameterResolver standardParameterResolver(@Qualifier("spring-shell") ConversionService conversionService,
18+
public ParameterResolver standardParameterResolver(ConversionService conversionService,
2019
ObjectProvider<ValueProvider> valueProviders) {
2120
Set<ValueProvider> collect = valueProviders.orderedStream().collect(Collectors.toSet());
2221
return new StandardParameterResolver(conversionService, collect);

spring-shell-autoconfigure/src/main/java/org/springframework/shell/boot/SpringShellAutoConfiguration.java

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,17 @@
1616

1717
package org.springframework.shell.boot;
1818

19-
import java.util.Collection;
2019
import java.util.Set;
2120

22-
import org.springframework.beans.factory.annotation.Qualifier;
21+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
22+
import org.springframework.boot.convert.ApplicationConversionService;
2323
import org.springframework.context.ApplicationContext;
2424
import org.springframework.context.annotation.Bean;
2525
import org.springframework.context.annotation.Configuration;
2626
import org.springframework.context.annotation.Import;
2727
import org.springframework.core.convert.ConversionService;
28-
import org.springframework.core.convert.converter.Converter;
29-
import org.springframework.core.convert.converter.ConverterFactory;
30-
import org.springframework.core.convert.converter.GenericConverter;
3128
import org.springframework.core.convert.support.DefaultConversionService;
29+
import org.springframework.format.support.FormattingConversionService;
3230
import org.springframework.shell.CommandRegistry;
3331
import org.springframework.shell.ResultHandler;
3432
import org.springframework.shell.ResultHandlerService;
@@ -44,23 +42,13 @@
4442
public class SpringShellAutoConfiguration {
4543

4644
@Bean
47-
@Qualifier("spring-shell")
45+
@ConditionalOnMissingBean(ConversionService.class)
4846
public ConversionService shellConversionService(ApplicationContext applicationContext) {
49-
Collection<Converter> converters = applicationContext.getBeansOfType(Converter.class).values();
50-
Collection<GenericConverter> genericConverters = applicationContext.getBeansOfType(GenericConverter.class).values();
51-
Collection<ConverterFactory> converterFactories = applicationContext.getBeansOfType(ConverterFactory.class).values();
52-
53-
DefaultConversionService defaultConversionService = new DefaultConversionService();
54-
for (Converter converter : converters) {
55-
defaultConversionService.addConverter(converter);
56-
}
57-
for (GenericConverter genericConverter : genericConverters) {
58-
defaultConversionService.addConverter(genericConverter);
59-
}
60-
for (ConverterFactory converterFactory : converterFactories) {
61-
defaultConversionService.addConverterFactory(converterFactory);
62-
}
63-
return defaultConversionService;
47+
FormattingConversionService service = new FormattingConversionService();
48+
DefaultConversionService.addDefaultConverters(service);
49+
DefaultConversionService.addCollectionConverters(service);
50+
ApplicationConversionService.addBeans(service, applicationContext);
51+
return service;
6452
}
6553

6654
@Bean

spring-shell-samples/src/main/java/org/springframework/shell/samples/standard/ConversionExample.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ class DomainObject {
4141
public String getValue() {
4242
return value;
4343
}
44+
45+
@Override
46+
public String toString() {
47+
return "DomainObject [value=" + value + "]";
48+
}
4449
}
4550

4651
@Component

0 commit comments

Comments
 (0)