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

Nicola Ferraro commented on CAMEL-10031:
----------------------------------------

I started working on this feature. One thing that can be done is to mimic the 
endpoint xml configuration.

It means providing the equivalent of the following snippet as spring-boot 
configuration:
{code:xml}
<camelContext ...>
 
  <endpoint id="foo" uri="ftp://foo@myserver";>
    <property name="password" value="secret"/>
    <property name="recursive" value="true"/>
    <property name="ftpClient.dataTimeout" value="30000"/>
    <property name="ftpClient.serverLanguageCode" value="fr"/> 
  </endpoint>
 
  <route>
    <from uri="ref:foo"/>
    ...
  </route>
</camelContext>
{code}

I managed to make the following configuration work for a sample component (I 
did not change the maven-plugin yet):
{code}
camel:
  component:
    ftp:
      endpoint:
        id: foo
        uri: ftp://foo@myserver
        password: secret
{code}

Or the _.properties_ equivalent:
{code}
camel.component.ftp.endpoint.id=foo
camel.component.ftp.endpoint.uri=ftp://foo@myserver
camel.component.ftp.endpoint.password=secret
{code}

The endpoint is created and can be used in routes as "ref:foo".

I considered also *nesting the properties in "camel.endpoint.ftp", probably 
it's a better choice*, because it's shorter and prevent confusion.

The limitations of this approach is that you can define a *single endpoint per 
component*, that is obviously not desired, but the IDE toolings (Intellij Idea 
in my case) have a *pretty bad support for Lists and Maps in configuration*.

The best I could do was adding an _additional-endpoints_ configuration 
property. The final result is:

{code}
camel:
  component:
    ftp:
      endpoint:
        id: foo
        uri: ftp://foo@myserver
        password: secret
      additional-endpoints:
        - id: bar
          uri: ftp://bar@myserver
          password: secret
        - id: three
          uri: ftp://three@myserver
          password: secret
{code}

Or the _.properties_ version:
{code}
camel.component.ftp.endpoint.id=foo
camel.component.ftp.endpoint.uri=ftp://foo@myserver
camel.component.ftp.endpoint.password=secret

camel.component.ftp.additional-endpoints[0].id=bar
camel.component.ftp.additional-endpoints[0].uri=ftp://bar@myserver
camel.component.ftp.additional-endpoints[0].password=secret

camel.component.ftp.additional-endpoints[1].id=three
camel.component.ftp.additional-endpoints[1].uri=ftp://three@myserver
camel.component.ftp.additional-endpoints[1].password=secret

{code}

The *auto-completion works partially only in the .properties version* (only 
when you press "." after _endpoints\[0\]_ the IDE lets you choose the 
properties from the list, *without descriptions or default values*). 
Auto-completion was not working in my IDE when I used Maps instead of Lists.

> camel-spring-boot - Add endpoint options as type-safe configuration properties
> ------------------------------------------------------------------------------
>
>                 Key: CAMEL-10031
>                 URL: https://issues.apache.org/jira/browse/CAMEL-10031
>             Project: Camel
>          Issue Type: New Feature
>          Components: camel-spring-boot
>            Reporter: Claus Ibsen
>
> See CAMEL-9419.
> We can now configure this for all the components. But for endpoints its a bit 
> more as you can have many endpoints with different configuration.
> So either you assign an id to the endpoint you configure, and then need to 
> refer to the endpoint by id, in the camel routes. Or we figure out something 
> else. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to