[ https://issues.apache.org/jira/browse/CAMEL-10548?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Luca Burgazzoli updated CAMEL-10548: ------------------------------------ Fix Version/s: 2.18.2 > Converter from List to String is not found when @EnableAutoConfiguration is > used > -------------------------------------------------------------------------------- > > Key: CAMEL-10548 > URL: https://issues.apache.org/jira/browse/CAMEL-10548 > Project: Camel > Issue Type: Bug > Components: camel-spring-boot > Reporter: Luca Burgazzoli > Assignee: Luca Burgazzoli > Fix For: 2.18.2, 2.19.0 > > > This very simple spring-boot application : > {code:java} > @SpringBootApplication > public class Application { > public static void main(String[] args) { > SpringApplication.run(Application.class, args); > } > @Component > public class MyRouteBuilder extends RouteBuilder { > @Override > public void configure() throws Exception { > from("timer:person") > .setBody().constant(Arrays.asList( > new Person("Peter", 25), > new Person("John", 33) > )) > .log("Body is ${body}"); > } > } > public static class Person { > private String name; > private int age; > public Person(String name, int age) { > this.name = name; > this.age = age; > } > public String getName() { > return name; > } > public void setName(String name) { > this.name = name; > } > public int getAge() { > return age; > } > public void setAge(int age) { > this.age = age; > } > @Override > public String toString() { > return "Person{" + > "name='" + name + '\'' + > ", age=" + age + > '}'; > } > } > } > {code} > Fails to resolve the simple expression ${body} because of the following > exception: > {code} > org.apache.camel.TypeConversionException: Error during type conversion from > type: java.lang.String to the required type: java.lang.String with value > [Person{name='Peter', age=25}, Person{name='John', age=33}] due Failed to > convert from type [java.util.Arrays$ArrayList<?>] to type [java.lang.String] > for value '[Person{name='Peter', age=25}, Person{name='John', age=33}]'; > nested exception is > org.springframework.core.convert.ConverterNotFoundException: No converter > found capable of converting from type [java.util.Arrays$ArrayList<?>] to type > [java.lang.String] > at > org.apache.camel.impl.converter.BaseTypeConverterRegistry.createTypeConversionException(BaseTypeConverterRegistry.java:629) > ~[camel-core-2.18.0.jar:2.18.0] > at > org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:150) > ~[camel-core-2.18.0.jar:2.18.0] > at > org.apache.camel.support.ExpressionAdapter.evaluate(ExpressionAdapter.java:41) > ~[camel-core-2.18.0.jar:2.18.0] > at > org.apache.camel.builder.ExpressionBuilder$75.evaluate(ExpressionBuilder.java:1795) > ~[camel-core-2.18.0.jar:2.18.0] > at > org.apache.camel.support.ExpressionAdapter.evaluate(ExpressionAdapter.java:36) > ~[camel-core-2.18.0.jar:2.18.0] > at > org.apache.camel.processor.LogProcessor.process(LogProcessor.java:53) > ~[camel-core-2.18.0.jar:2.18.0] > at > org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) > ~[camel-core-2.18.0.jar:2.18.0] > at > org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:542) > ~[camel-core-2.18.0.jar:2.18.0] > at > org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197) > [camel-core-2.18.0.jar:2.18.0] > at org.apache.camel.processor.Pipeline.process(Pipeline.java:120) > ~[camel-core-2.18.0.jar:2.18.0] > at org.apache.camel.processor.Pipeline.process(Pipeline.java:83) > ~[camel-core-2.18.0.jar:2.18.0] > at > org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:197) > [camel-core-2.18.0.jar:2.18.0] > at > org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:192) > [camel-core-2.18.0.jar:2.18.0] > at > org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:76) > [camel-core-2.18.0.jar:2.18.0] > at java.util.TimerThread.mainLoop(Timer.java:555) [na:1.8.0_112] > at java.util.TimerThread.run(Timer.java:505) [na:1.8.0_112] > Caused by: org.springframework.core.convert.ConversionFailedException: Failed > to convert from type [java.util.Arrays$ArrayList<?>] to type > [java.lang.String] for value '[Person{name='Peter', age=25}, > Person{name='John', age=33}]'; nested exception is > org.springframework.core.convert.ConverterNotFoundException: No converter > found capable of converting from type [java.util.Arrays$ArrayList<?>] to type > [java.lang.String] > at > org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:42) > ~[spring-core-4.3.3.RELEASE.jar:4.3.3.RELEASE] > at > org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:192) > ~[spring-core-4.3.3.RELEASE.jar:4.3.3.RELEASE] > at > org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:176) > ~[spring-core-4.3.3.RELEASE.jar:4.3.3.RELEASE] > at > org.apache.camel.spring.boot.SpringTypeConverter.convertTo(SpringTypeConverter.java:46) > ~[camel-spring-boot-2.18.0.jar:2.18.0] > at > org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:346) > ~[camel-core-2.18.0.jar:2.18.0] > at > org.apache.camel.impl.converter.BaseTypeConverterRegistry.convertTo(BaseTypeConverterRegistry.java:133) > ~[camel-core-2.18.0.jar:2.18.0] > ... 14 common frames omitted > Caused by: org.springframework.core.convert.ConverterNotFoundException: No > converter found capable of converting from type > [java.util.Arrays$ArrayList<?>] to type [java.lang.String] > at > org.springframework.core.convert.support.GenericConversionService.handleConverterNotFound(GenericConversionService.java:313) > ~[spring-core-4.3.3.RELEASE.jar:4.3.3.RELEASE] > at > org.springframework.core.convert.support.GenericConversionService.convert(GenericConversionService.java:195) > ~[spring-core-4.3.3.RELEASE.jar:4.3.3.RELEASE] > at > org.springframework.core.convert.support.CollectionToStringConverter.convert(CollectionToStringConverter.java:68) > ~[spring-core-4.3.3.RELEASE.jar:4.3.3.RELEASE] > at > org.springframework.core.convert.support.ConversionUtils.invokeConverter(ConversionUtils.java:36) > ~[spring-core-4.3.3.RELEASE.jar:4.3.3.RELEASE] > ... 19 common frames omitted > {code} > The root cause is spring failing to find a converter for Person --> String > and as the SpringTypeConverter registered by camel-spring-boot is one of the > fallback converters used by BaseTypeConverterRegistry, it leads Camel to fail > too. > As today is a Camel TypeConverter fails with an exception while looping over > fallback converters, the loops ends and the conversion fails too. It may turn > out that the bug is caused by the way camel uses Spring's type converters but > it may be good to catch exceptions and try the next converter, [~davsclaus] > make sense ? > A workaround is to create a custom converter for the class: > {code:java} > @Component > public class PersonConverter implements Converter<Person, String> { > @Override > public String convert(Person source) { > return source.toString(); > } > } > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)