[
https://issues.apache.org/jira/browse/CAMEL-15686?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Franky Georg updated CAMEL-15686:
---------------------------------
Description:
Injecting an EndpointProducerBuilder bean that uses a simple expression causes
an exception.
{code:java}
@Configuration
public class MyTestRoute extends EndpointRouteBuilder {
private static final String MY_TOPIC = "testTopic";
@Autowired
private EndpointProducerBuilder myKafkaBean;
@Override
public void configure() {
from(timer("myTimer").repeatCount(1))
.setBody(constant("THIS IS A TEST MESSAGE"))
.setProperty("destination2", constant(MY_TOPIC))
.to("direct:publish-to-kafka2")
;
from("direct:publish-to-kafka2")
.toD(myKafkaBean)
;
from(kafka(MY_TOPIC))
.log("Received: ${body}")
;
}
@Bean
public EndpointProducerBuilder myKafkaBean() {
return kafka("${exchangeProperty.destination2}");
}
}{code}
Exception from org.apache.kafka.clients.Metadata:
{code:java}
Metadata response reported invalid topics
[${exchangeProperty.destination}]{code}
I don't have to _use_ the bean for the error to manifest, it's enough to
@Autowire it.
It _does_ work for static endpoints:
{code:java}
return kafka("myTopic"); // This works fine from an EndpointProducerBuilder
bean{code}
And it _does_ work for dynamic endpoints in URI form:
{code:java}
return "kafka:${exchangeProperty.destination}"; // This works fine but you
lose type safety{code}
Creating beans like this is useful for unit testing as they can be overridden
to return mock/direct/whatever-is-useful, _without_ _first creating the
original endpoint_, which can significantly reduce execution time.
was:
Injecting an EndpointProducerBuilder bean that uses a simple expression causes
an exception.
{code:java}
@Configuration
public class MyTestRoute extends EndpointRouteBuilder {
private static final String MY_TOPIC = "testTopic";
@Autowired
private EndpointProducerBuilder myKafkaBean;
@Override
public void configure() {
from(timer("myTimer").repeatCount(1))
.setBody(constant("THIS IS A TEST MESSAGE"))
.setProperty("destination2", constant(MY_TOPIC))
.to("direct:publish-to-kafka2")
;
from("direct:publish-to-kafka2")
.toD(myKafkaBean)
;
from(kafka(MY_TOPIC))
.log("Received: ${body}")
;
}
@Bean
public EndpointProducerBuilder myKafkaBean() {
return kafka("${exchangeProperty.destination2}");
}
}{code}
Exception from org.apache.kafka.clients.Metadata:
{code:java}
Metadata response reported invalid topics
[${exchangeProperty.destination}]{code}
It _does_ work for static endpoints:
{code:java}
return kafka("myTopic"); // This works fine from an EndpointProducerBuilder
bean{code}
And it _does_ work for dynamic endpoints in URI form:
{code:java}
return "kafka:${exchangeProperty.destination}"; // This works fine but you
lose type safety{code}
Creating beans like this is useful for unit testing as they can be overridden
to return mock/direct/whatever-is-useful, _without_ _first creating the
original endpoint_, which can significantly reduce execution time.
> Enable EndpointDSL with simple expressions within an Endpoint Builder bean
> --------------------------------------------------------------------------
>
> Key: CAMEL-15686
> URL: https://issues.apache.org/jira/browse/CAMEL-15686
> Project: Camel
> Issue Type: Improvement
> Components: camel-endpointdsl
> Environment: Experienced with
> * Camel 3.3
> * Spring Boot 2.3.4
> Reporter: Franky Georg
> Assignee: Claus Ibsen
> Priority: Minor
> Fix For: 3.7.0
>
>
> Injecting an EndpointProducerBuilder bean that uses a simple expression
> causes an exception.
> {code:java}
> @Configuration
> public class MyTestRoute extends EndpointRouteBuilder {
> private static final String MY_TOPIC = "testTopic";
> @Autowired
> private EndpointProducerBuilder myKafkaBean;
> @Override
> public void configure() {
> from(timer("myTimer").repeatCount(1))
> .setBody(constant("THIS IS A TEST MESSAGE"))
> .setProperty("destination2", constant(MY_TOPIC))
> .to("direct:publish-to-kafka2")
> ;
> from("direct:publish-to-kafka2")
> .toD(myKafkaBean)
> ;
> from(kafka(MY_TOPIC))
> .log("Received: ${body}")
> ;
> }
> @Bean
> public EndpointProducerBuilder myKafkaBean() {
> return kafka("${exchangeProperty.destination2}");
> }
> }{code}
> Exception from org.apache.kafka.clients.Metadata:
> {code:java}
> Metadata response reported invalid topics
> [${exchangeProperty.destination}]{code}
> I don't have to _use_ the bean for the error to manifest, it's enough to
> @Autowire it.
>
> It _does_ work for static endpoints:
> {code:java}
> return kafka("myTopic"); // This works fine from an
> EndpointProducerBuilder bean{code}
> And it _does_ work for dynamic endpoints in URI form:
> {code:java}
> return "kafka:${exchangeProperty.destination}"; // This works fine but
> you lose type safety{code}
>
> Creating beans like this is useful for unit testing as they can be overridden
> to return mock/direct/whatever-is-useful, _without_ _first creating the
> original endpoint_, which can significantly reduce execution time.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)