[
https://issues.apache.org/jira/browse/CAMEL-11718?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16151824#comment-16151824
]
Roman commented on CAMEL-11718:
-------------------------------
Hi [~davsclaus]
Oh yes, I know the bean needs to be defined in Spring. `jacksonObjectMapper` is
the default bean name provided by Spring Boot auto configuration you can [see
it
here|https://github.com/spring-projects/spring-boot/blob/11edff7576085964191f4fea7593dd47eebeec76/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jackson/JacksonAutoConfiguration.java#L91].
While debugging, I've tried to look up the bean from the camel context and it
is definitely there. I've also tried defining my own ObjectMapper bean and use
its name, but it doesn't work.
> Setting camel.dataformat.json-jackson.object-mapper throws exception
> --------------------------------------------------------------------
>
> Key: CAMEL-11718
> URL: https://issues.apache.org/jira/browse/CAMEL-11718
> Project: Camel
> Issue Type: Improvement
> Components: camel-jackson
> Affects Versions: 2.19.2
> Reporter: Roman
>
> I wanted to reuse the Jackson object mapper used by Spring MVC but jackson
> json configuration via YML is not working an causing an exception
> {code:none}
> camel:
> springboot:
> name: ${spring.application.name}
> dataformat:
> json-jackson:
> object-mapper: jacksonObjectMapper
> spring:
> jackson:
> property-naming-strategy:
> com.fasterxml.jackson.databind.PropertyNamingStrategy.SnakeCaseStrategy
> default-property-inclusion: non_null
> serialization:
> WRITE_DATES_AS_TIMESTAMPS: true
> {code}
> Throws the following exception:
> {noformat}
> org.apache.camel.spring.boot.CamelSpringBootInitializationException:
> org.apache.camel.FailedToCreateRouteException: Failed to create route
> test-public: Route(test-public)[[From[rest:get:/test?routeId=test-public&...
> because of java.lang.IllegalArgumentException: Could not find a suitable
> setter for property: objectMapper as there isn't a setter method with same
> type: java.lang.String nor type conversion possible: No type converter
> available to convert from type: java.lang.String to the required type:
> com.fasterxml.jackson.databind.ObjectMapper with value jacksonObjectMapper
> at
> org.apache.camel.spring.boot.RoutesCollector.onApplicationEvent(RoutesCollector.java:225)
> at
> org.apache.camel.spring.boot.RoutesCollector.onApplicationEvent(RoutesCollector.java:52)
> at
> org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167)
> at
> org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
> at
> org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393)
> at
> org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347)
> at
> org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:883)
> at
> org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:144)
> at
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
> at
> org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
> at
> org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
> at
> org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
> at
> org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
> at
> org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
> at
> org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
> at
> au.com.iag.payments.service.OnlinePaymentsApplicationKt.main(OnlinePaymentsApplication.kt:15)
> Caused by: org.apache.camel.FailedToCreateRouteException: Failed to create
> route test-public:
> Route(test-public)[[From[rest:get:/test?routeId=test-public&... because of
> java.lang.IllegalArgumentException: Could not find a suitable setter for
> property: objectMapper as there isn't a setter method with same type:
> java.lang.String nor type conversion possible: No type converter available to
> convert from type: java.lang.String to the required type:
> com.fasterxml.jackson.databind.ObjectMapper with value jacksonObjectMapper
> at
> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:209)
> at
> org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:1087)
> at
> org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:3540)
> at
> org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3271)
> at
> org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:202)
> at
> org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3089)
> at
> org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3085)
> at
> org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:3108)
> at
> org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:3085)
> at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
> at
> org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:3022)
> at
> org.apache.camel.spring.boot.RoutesCollector.maybeStart(RoutesCollector.java:242)
> at
> org.apache.camel.spring.boot.RoutesCollector.onApplicationEvent(RoutesCollector.java:217)
> ... 15 common frames omitted
> Caused by: org.apache.camel.RuntimeCamelException:
> java.lang.IllegalArgumentException: Could not find a suitable setter for
> property: objectMapper as there isn't a setter method with same type:
> java.lang.String nor type conversion possible: No type converter available to
> convert from type: java.lang.String to the required type:
> com.fasterxml.jackson.databind.ObjectMapper with value jacksonObjectMapper
> at
> org.apache.camel.component.jackson.springboot.JacksonDataFormatAutoConfiguration$1.newInstance(JacksonDataFormatAutoConfiguration.java:80)
> at
> org.apache.camel.impl.DefaultDataFormatResolver.createDataFormat(DefaultDataFormatResolver.java:58)
> at
> org.apache.camel.impl.DefaultDataFormatResolver.resolveDataFormat(DefaultDataFormatResolver.java:45)
> at
> org.apache.camel.impl.DefaultCamelContext.resolveDataFormat(DefaultCamelContext.java:4240)
> at
> org.apache.camel.model.rest.RestBindingDefinition.createRestBindingAdvice(RestBindingDefinition.java:122)
> at
> org.apache.camel.impl.DefaultRouteContext.commit(DefaultRouteContext.java:201)
> at
> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:1302)
> at
> org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:204)
> ... 27 common frames omitted
> Caused by: java.lang.IllegalArgumentException: Could not find a suitable
> setter for property: objectMapper as there isn't a setter method with same
> type: java.lang.String nor type conversion possible: No type converter
> available to convert from type: java.lang.String to the required type:
> com.fasterxml.jackson.databind.ObjectMapper with value jacksonObjectMapper
> at
> org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:614)
> at
> org.apache.camel.util.IntrospectionSupport.setProperty(IntrospectionSupport.java:640)
> at
> org.apache.camel.util.IntrospectionSupport.setProperties(IntrospectionSupport.java:497)
> at
> org.apache.camel.component.jackson.springboot.JacksonDataFormatAutoConfiguration$1.newInstance(JacksonDataFormatAutoConfiguration.java:76)
> ... 34 common frames omitted
> {noformat}
> I have also tried with
> {code}
> ...
> object-mapper: "#jacksonObjectMapper"
> ...
> {code}
> to give the property introspection logic a hint that it is a ref, but result
> is the same.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)