David Url created CAMEL-18196:
---------------------------------
Summary: POJO-Producing: java.lang.IllegalStateException: Producer
has not been started
Key: CAMEL-18196
URL: https://issues.apache.org/jira/browse/CAMEL-18196
Project: Camel
Issue Type: Bug
Components: camel-core
Affects Versions: 3.17.0
Reporter: David Url
I was following the POJO-Producing seciton in the manual in order to have
transport agnostic spring beans that produce events.
(https://camel.apache.org/manual/pojo-producing.html#_hiding_the_camel_apis_from_your_code)
My setup looks like this:
{code}
@Component
public class RecorderSender {
public static final String ENDPOINT_NAME =
"direct:recorderSender?block=true&synchronous=true";
private ProducerEndpoint<byte[]> endpoint;
@Produce(RecorderSender.ENDPOINT_NAME)
public void setEndpoint(final ProducerEndpoint<byte[]> endpoint) {
this.endpoint = endpoint;
}
public void write(final byte[] payload) {
this.endpoint.send(payload);
}
}
@InOnly
public interface ProducerEndpoint<T> {
void send(T object);
}
{code}
However once my spring bean is initialized it starts calling
{{RecorderSender.write(byte[])}} at a time where the CamelContext is not yet
initialized, and I get this exception:
{noformat}
Exception in thread "connector-1" java.lang.IllegalStateException: Producer has
not been started: Producer[direct://recorderSender?block=true&synchronous=true]
at
org.apache.camel.processor.EventNotifierProducer.process(EventNotifierProducer.java:54)
at
org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:83)
at
org.apache.camel.support.DefaultAsyncProducer.process(DefaultAsyncProducer.java:41)
at
org.apache.camel.component.bean.AbstractCamelInvocationHandler$1.call(AbstractCamelInvocationHandler.java:189)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at
org.apache.camel.component.bean.AbstractCamelInvocationHandler.doInvoke(AbstractCamelInvocationHandler.java:207)
at
org.apache.camel.component.bean.AbstractCamelInvocationHandler.invokeProxy(AbstractCamelInvocationHandler.java:169)
at
org.apache.camel.component.bean.CamelInvocationHandler.doInvokeProxy(CamelInvocationHandler.java:43)
at
org.apache.camel.component.bean.AbstractCamelInvocationHandler.invoke(AbstractCamelInvocationHandler.java:81)
at jdk.proxy2/jdk.proxy2.$Proxy99.send(Unknown Source)
at com.example.RecorderSender.write(RecorderSender.java:45)
at
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
{noformat}
I assumed that the properties {{block}} and {{synchronous}} would ensure that
the call is blocking, regardless of the initialization state of the
CamelContext.
I'm not sure whether this is actually a bug, or intentional behavior. But it
would be nice to have the POJO Producing guide mentioning this behavior, or
hinting at a better solution.
--
This message was sent by Atlassian Jira
(v8.20.7#820007)