[ https://issues.apache.org/jira/browse/CAMEL-4650?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13146956#comment-13146956 ]
Babak Vahdat commented on CAMEL-4650: ------------------------------------- I did a typo in the user forum about the condition which holds, causing the NPE. Correctly it's: {code} multicastStarted == true || consumerMulticastProcessor == null {code} Looking at SedaConsumer.sendToConsumers() it's: {code} protected void sendToConsumers(Exchange exchange) throws Exception { int size = endpoint.getConsumers().size(); // if there are multiple consumers then multicast to them if (size > 1) { if (LOG.isDebugEnabled()) { LOG.debug("Multicasting to {} consumers for Exchange: {}", endpoint.getConsumers().size(), exchange); } // use a multicast processor to process it MulticastProcessor mp = endpoint.getConsumerMulticastProcessor(); // and use the asynchronous routing engine to support it AsyncProcessorHelper.process(mp, exchange, new AsyncCallback() { public void done(boolean doneSync) { // noop } }); } else { // use the regular processor and use the asynchronous routing engine to support it AsyncProcessorHelper.process(processor, exchange, new AsyncCallback() { public void done(boolean doneSync) { // noop } }); } } {code} Which as you see does call: {code} endpoint.getConsumerMulticastProcessor(); {code} But doesn't take into the account that the returned reference (of type MulticastProcessor) could be null. In your case it *was* null, as apparently the condition I mentioned in user forum holds. I would love to provide a patch for this, but the SedaEndpoint is to me one of those non-trivial camel's endpoint (concurrency was / is never trivial :-(). If some camel riders could give me a hint, I would assign the ticket to myself and would provide a patch (including a unit-test) proving the fix. > NPE when using SEDA route and attaching an extra consumer > --------------------------------------------------------- > > Key: CAMEL-4650 > URL: https://issues.apache.org/jira/browse/CAMEL-4650 > Project: Camel > Issue Type: Bug > Components: camel-core > Affects Versions: 2.8.2 > Environment: Java 6, Camel 2.8.2, Centos 4. > Reporter: Tarjei Huse > > I'm trying to construct a system for moving some seda queues over to > ActiveMQ during system shutdown. What I did was create a Route that > connects to some of my seda queues and then drains the queue to activemq. > Basicly I got two routes, the drainer: > from("seda:" + sedaId + "?size=1000") > .routeId(routeName + > sedaIs).noAutoStartup().to(activeMQFailuresQueue); > And the main route: > from("seda:" + sedaId + "?size=1000") > .routeId(routeName + sedaIs).to(SomeProcessor); > Now, sometimes the main route stalls for various reasons I need to > restart the jvm process it is running in, so I start the first route. > But when trying this in production, I got: > java.lang.NullPointerException > at > org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78) > at > org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:210) > at > org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:155) > at > org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:129) > at > java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) > at java.lang.Thread.run(Thread.java:619) > Bvahdat added a comment: > just a very tiny pointer: > Looking at the source it seems that the > SedaEndpoint.getConsumerMulticastProcessor() method returns 'null' causing > the NPE, as the condition: > multicastStarted == false || consumerMulticastProcessor == null > is true. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira