I created a JIRA to not forget
https://issues.apache.org/jira/browse/CAMEL-18938

On Fri, Jan 6, 2023 at 10:06 AM Claus Ibsen <claus.ib...@gmail.com> wrote:

> You can also use string uri instead of endpoint dsl, then you can refer to
> the via kafka:....?additionalProperties=#myMapBeanId
>
> So we may need for endpoint dsl to include a fluent builder for Map that
> is a string value to use for bean reference lookup
>
> On Fri, Jan 6, 2023 at 9:31 AM Claus Ibsen <claus.ib...@gmail.com> wrote:
>
>>
>>
>> On Fri, Jan 6, 2023 at 9:17 AM Martin Pelikán <pelda...@gmail.com> wrote:
>>
>>> Hi Claus,
>>>
>>> I tested your approach but wasn't successful. Reference is stored in
>>> Properties as text. I confirmed bean is registered in Spring context
>>> with the proper BeanID.
>>>
>>> @Bean(name = "tokenCredential")
>>> public TokenCredential tokenCredential() {...create an instance}
>>>
>>> in debugger (simplified) ->
>>> camelContext.registry.lookupByName("tokenCredential") -> returns valid
>>> object
>>> .....
>>> .additionalProperties("schema.registry.credential", "#tokenCredential")
>>>
>>> results into
>>> "schema.registry.credential" = "#tokenCredential"
>>>
>>> I guess the hash reference notation works only for Camel-specific
>>> fields, like
>>> .headerDeserializer("#customKafkaHeaderDeserializer") or
>>> .headerFilterStrategy("#customHeaderFilterStrategy")   // verified, works
>>>
>>> Any ideas?
>>>
>>
>> Okay so we should make this possible for additional properties as well.
>> You are welcome to create a JIRA.
>>
>>
>>
>>>
>>> čt 5. 1. 2023 v 18:22 odesílatel Claus Ibsen <claus.ib...@gmail.com>
>>> napsal:
>>> >
>>> > You cannot use complex object types, only string literal, numbers,
>>> booleans
>>> > etc.
>>> >
>>> > So what you need to do is to create those objects with some bean id
>>> (spring
>>> > boot @Bean stuff) and then refer to them via their bean id.
>>> >
>>> > Something ala
>>> >
>>> >
>>> > .additionallProperties("xxx", "#myBeanId")
>>> >
>>> >
>>> >
>>> >
>>> > On Thu, Jan 5, 2023 at 6:10 PM Martin Pelikán <pelda...@gmail.com>
>>> wrote:
>>> >
>>> > > My case is related to connecting to Azure EventHubs Avro Schema
>>> Registry.
>>> > >
>>> > > TokenCredential cred = new
>>> > >
>>> > >
>>> ClientSecretCredentialBuilder().tenantId("xxx").clientId("xxx").clientSecret("xx").build();
>>> > > props.put("schema.registry.credential", cred);
>>> > >
>>> > > Another case that comes to my mind is with OAUTHBEARER
>>> authentication.
>>> > > Users could supply instantiated AuthenticateCallbackHandler class to
>>> > > the  sasl.login.callback.handler.class property.
>>> > >
>>> > > TokenCredential as part of Properties works with
>>> > > org.apache.kafka.clients.consumer.KafkaConsumer.
>>> > >
>>> > > čt 5. 1. 2023 v 17:59 odesílatel Claus Ibsen <claus.ib...@gmail.com>
>>> > > napsal:
>>> > > >
>>> > > > Whats the real world use-case for additional properties as Object
>>> or Map.
>>> > > > What would kafka understand and use these for?
>>> > > >
>>> > > > On Thu, Jan 5, 2023 at 5:12 PM Martin Pelikán <pelda...@gmail.com>
>>> > > wrote:
>>> > > >
>>> > > > > Hi Camel experts,
>>> > > > >
>>> > > > > I am struggling with a Kafka component and passing in parameters
>>> via
>>> > > > > additionalProperties. I am not able to propagate an Object. I
>>> tested
>>> > > > > only Endpoint DSL. According to the Camel docs and APIs, I am
>>> allowed
>>> > > > > to pass in an instance of Map<String, Object>
>>> > > > >
>>> > > > >  Camel version: 3.18.4
>>> > > > >
>>> > > > > ----Pseudocode-----
>>> > > > >
>>> > > > > @Configuration
>>> > > > > Class SpringConfig
>>> > > > >
>>> > > > > @Bean(name = "autowiredMap")
>>> > > > > public Map<String, Object> autowiredMap() {
>>> > > > >     var map = new HashMap<String, Object>();
>>> > > > >     map.put("testStringKey3", "testStringValue3");
>>> > > > >     map.put("testObjectKey3", new Object());
>>> > > > > }
>>> > > > >
>>> > > > > -------
>>> > > > >
>>> > > > > Class MainRoute extends RouteBuilder()
>>> > > > >
>>> > > > > @Autowired
>>> > > > > @Qualifier("autowiredMap")
>>> > > > > Map<String, Object> autowiredMap;
>>> > > > >
>>> > > > > var map = new HashMap<String, Object>();
>>> > > > > map.put("testStringKey1", "testStringValue1");
>>> > > > > map.put("testObjectKey1", new Object());
>>> > > > >
>>> > > > > from(kafka(…basic configuration works)
>>> > > > >     .schemaRegistryURL(http://original.com)
>>> > > > >     .additionalProperties(map)
>>> > > > >     .additionalProperties("testStringKey2", "testStringValue2")
>>> > > > >     .additionalProperties("testObjectKey1", new Object())
>>> > > > >     .additionalProperties("schema.registry.url",
>>> > > http://overwritten.com)
>>> > > > >     .additionalProperties(autowiredMap)...
>>> > > > >
>>> > > > > Expected:
>>> > > > >
>>> > > > > All properties from all additionalProperties methods are
>>> propagated to
>>> > > > > the Kafka Properties configuration object.
>>> > > > >
>>> > > > > In reality, Properties will contain the following:
>>> > > > > schema.registry.url=http://overwritten.com
>>> > > > > testStringKey1=testStringValue1
>>> > > > > testStringKey2=testStringValue2
>>> > > > >
>>> > > > > Non-string values are not propagated at all. Values from
>>> autowired Map
>>> > > > > are not propagated at all. Autowired map is treated as
>>> > > > > additionalProperties.autowiredMap=HashMap@123456
>>> > > > >
>>> > > > > I can see those String values being added to the Kafka Endpoint
>>> URI:
>>> > > > >
>>> > > > >
>>> > >
>>> kafka://additionalProperties.testStringKey1=xxx&additionalProperties.testStringKey2=xxx&additionalProperties.schema.registr.url=xxx..
>>> > > > >
>>> > > > > Is it a bug in Camel or did I understand the documentation
>>> wrong? I
>>> > > > > can prepare a test case later
>>> > > > >
>>> > > > > Best regards,
>>> > > > >
>>> > > > > Martin
>>> > > > >
>>> > > >
>>> > > >
>>> > > > --
>>> > > > Claus Ibsen
>>> > > > -----------------
>>> > > > @davsclaus
>>> > > > Camel in Action 2: https://www.manning.com/ibsen2
>>> > >
>>> >
>>> >
>>> > --
>>> > Claus Ibsen
>>> > -----------------
>>> > @davsclaus
>>> > Camel in Action 2: https://www.manning.com/ibsen2
>>>
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> @davsclaus
>> Camel in Action 2: https://www.manning.com/ibsen2
>>
>
>
> --
> Claus Ibsen
> -----------------
> @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2
>


-- 
Claus Ibsen
-----------------
@davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to