You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Roman (JIRA)" <ji...@apache.org> on 2017/09/03 14:29:00 UTC

[jira] [Comment Edited] (CAMEL-11718) Setting camel.dataformat.json-jackson.object-mapper throws exception

    [ https://issues.apache.org/jira/browse/CAMEL-11718?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16151824#comment-16151824 ] 

Roman edited comment on CAMEL-11718 at 9/3/17 2:28 PM:
-------------------------------------------------------

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. The IntrospectionSupport#setProperty method that is called by the auto-generated JacksonDataFormatConfiguration is not the one that supports refs.


was (Author: strelok1):
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)