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

Jan Bednar commented on CAMEL-14299:
------------------------------------

I can reproduce this with your code. The datasource is auto configured with 
spring boot. During this initialization there are some calls to openConnection, 
which causes HikariConfig to seal. Then comes in place Camel Introspection 
trying to set DataSource to HikariConfig object, which is already sealed and 
cannot be modified.

Until we find solution, you can use one of these workarounds:

Replace *toD* with *to* and *CamelSqlQuery* header
{code:java}
      .setHeader("insertSql", constant("insert into tmp (col1, col2) values 
(:?val1, :?val2)")) //Notice ? instead of #
      .setHeader("CamelSqlQuery", header("insertSql"))
      .to("sql:insert?dataSource=#dataSource")
{code}
OR downgrade hikari in your pom to lower version , where sealing mechanism was 
not implemented
{code:java}
<dependency>
      <groupId>com.zaxxer</groupId>
      <artifactId>HikariCP</artifactId>
      <version>2.7.4</version>
    </dependency>
{code}

> camel-sql - Dynamic producer (toD) problem
> ------------------------------------------
>
>                 Key: CAMEL-14299
>                 URL: https://issues.apache.org/jira/browse/CAMEL-14299
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-sql
>    Affects Versions: 3.0.0
>            Reporter: Gurpal2000
>            Priority: Minor
>             Fix For: 3.0.1, 3.1.0
>
>         Attachments: log.txt
>
>
> Spring Boot: 2.2.1
> Camel: 3.0.0
> *Works* using "to()"
>  
> {code:java}
> from("file://d:/tmp/?fileName=test&noop=true")
> .setHeader("val1", constant(1))
> .setHeader("val2", constant("yo"))
> .to("sql:insert into gbtemp (col1, col2) values (:#val1, 
> :#val2)?dataSource=#dataSource");
> {code}
> Does *not work* using ".toD()"
> {code:java}
> from("file://d:/tmp/?fileName=test&noop=true")
> .setHeader("val1", constant(1))
> .setHeader("val2", constant("yo"))
> .setHeader("insertSql", constant("insert into gbtemp (col1, col2) values 
> (:#val1, :#val2)"))
> .toD("sql:${header.insertSql}?dataSource=#dataSource");
> {code}
> This used to work fine under Camel 2.x
> Example error lines:
> {code:java}
> Caused by: org.apache.camel.RuntimeCamelException: Cannot auto create 
> component: sql
> Caused by: org.apache.camel.PropertyBindingException: Error binding 
> properties on bean: org.apache.camel.component.sql.SqlComponent@a72b3b2
> org.apache.camel.ResolveEndpointFailedException: Failed to resolve endpoint: 
> sql://insert...
> {code}
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to