2

In one of my projects, I had an issue, which is not always reproducible but time and again creates problems. I will explain the important parts here:

This project is being deployed in Apache Karaf.

First route:

...
...
.to("prs-producer:queue:raw.token.passes")

Second Route: The incoming data from Step 1 has dependencies, so there is a need to enrich it on the flight.

from("prs-consumer:queue:raw.token.passes")
      .enrich("dw:SELECT TOP 1 Id FROM base.Orders WHERE SourceId = :#OrderId?outputType=SelectOne", new DependencyAggregationStrategy("OrderId"))
      .enrich("dw:SELECT TOP 1 Id FROM base.Campaigns WHERE SourceId = :#CampaignId?outputType=SelectOne", new DependencyAggregationStrategy("CampaignId"))

The first and second routes are deployed as different jar files, in Karaf.

It is evident from the second route that this item is dependent upon Orders and Campaigns. Thus, deploying this route before those jars(routes) results in following error.

Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
[route9            ] [route9            ] [prseai-consumer://queue:raw.token.passes                                   ] [         2]
[route9            ] [enrich7           ] [enrich[constant{prsdw:SELECT TOP 1 Id FROM base.SourceTable WHERE SourceId = ] [         1]

Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
java.lang.NullPointerException: null
2018-08-22T23:14:14,006 | TRACE | Blueprint Event Dispatcher: 1 | modelmbean                       |  -  -  | Entry
2018-08-22T23:14:14,006 | TRACE | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | CamelInternalProcessor           | 50 - org.apache.camel.camel-core - 2.21.2 | Exchange processed and is continued routed synchronously for exchangeId: ID-brckner-ThinkPad-T480-1534972104151-2-451 -> Exchange[ID-brckner-ThinkPad-T480-1534972104151-2-451]
2018-08-22T23:14:14,006 | TRACE | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | Pipeline                         | 50 - org.apache.camel.camel-core - 2.21.2 | Processing exchangeId: ID-brckner-ThinkPad-T480-1534972104151-2-451 is continued being processed synchronously
2018-08-22T23:14:14,006 | TRACE | Blueprint Event Dispatcher: 1 | modelmbean                       |  -  -  | Returning 5 fields
2018-08-22T23:14:14,006 | DEBUG | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | Pipeline                         | 50 - org.apache.camel.camel-core - 2.21.2 | Message exchange has failed: so breaking out of pipeline for exchange: Exchange[ID-brckner-ThinkPad-T480-1534972104151-2-451] Exception: java.lang.NullPointerException
2018-08-22T23:14:14,006 | TRACE | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | Pipeline                         | 50 - org.apache.camel.camel-core - 2.21.2 | Processing complete for exchangeId: ID-brckner-ThinkPad-T480-1534972104151-2-451 >>> Exchange[ID-brckner-ThinkPad-T480-1534972104151-2-451]
2018-08-22T23:14:14,006 | TRACE | Blueprint Event Dispatcher: 1 | modelmbean                       |  -  -  | Exit
2018-08-22T23:14:14,006 | TRACE | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | DefaultUnitOfWork                | 50 - org.apache.camel.camel-core - 2.21.2 | UnitOfWork afterRoute: route9 for ExchangeId: ID-brckner-ThinkPad-T480-1534972104151-2-451 with Exchange[ID-brckner-ThinkPad-T480-1534972104151-2-451]
2018-08-22T23:14:14,006 | TRACE | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | CamelInternalProcessor           | 50 - org.apache.camel.camel-core - 2.21.2 | route: Recording duration: 2 millis for exchange: Exchange[ID-brckner-ThinkPad-T480-1534972104151-2-451]
2018-08-22T23:14:14,006 | TRACE | Blueprint Event Dispatcher: 1 | modelmbean                       |  -  -  | Printing 5 fields
2018-08-22T23:14:14,006 | TRACE | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | DefaultUnitOfWork                | 50 - org.apache.camel.camel-core - 2.21.2 | UnitOfWork done for ExchangeId: ID-brckner-ThinkPad-T480-1534972104151-2-451 with Exchange[ID-brckner-ThinkPad-T480-1534972104151-2-451]
2018-08-22T23:14:14,006 | TRACE | Blueprint Event Dispatcher: 1 | modelmbean                       |  -  -  | Exit returning descriptorType=operation, displayName=suspend, mask=false, name=suspend, role=operation
2018-08-22T23:14:14,006 | TRACE | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | EventHelper                      | 50 - org.apache.camel.camel-core - 2.21.2 | Notifier: org.apache.camel.core.osgi.OsgiCamelContextPublisher@3e78b77b is not enabled for the event: ID-brckner-ThinkPad-T480-1534972104151-2-451 exchange failure: Exchange[ID-brckner-ThinkPad-T480-1534972104151-2-451] cause java.lang.NullPointerException
2018-08-22T23:14:14,006 | TRACE | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | CamelInternalProcessor           | 50 - org.apache.camel.camel-core - 2.21.2 | Exchange processed and is continued routed synchronously for exchangeId: ID-brckner-ThinkPad-T480-1534972104151-2-451 -> Exchange[ID-brckner-ThinkPad-T480-1534972104151-2-451]
2018-08-22T23:14:14,006 | TRACE | Blueprint Event Dispatcher: 1 | MBeanInfoAssembler               | 50 - org.apache.camel.camel-core - 2.21.2 | Assembled operation: ModelMBeanOperationInfo: suspend ; Description: Suspend Service ; Descriptor: descriptorType=operation, displayName=suspend, mask=false, name=suspend, role=operation ; ReturnType: void ; Signature: 
2018-08-22T23:14:14,006 | TRACE | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | EndpointMessageListener          | 50 - org.apache.camel.camel-core - 2.21.2 | onMessage.process END
2018-08-22T23:14:14,007 | TRACE | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | EndpointMessageListener          | 50 - org.apache.camel.camel-core - 2.21.2 | onMessage END throwing exception: java.lang.NullPointerException
2018-08-22T23:14:14,006 | TRACE | Blueprint Event Dispatcher: 1 | modelmbean                       |  -  -  | Constructor
2018-08-22T23:14:14,007 | TRACE | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | BundleDelegatingClassLoader      | 48 - org.apache.camel.camel-blueprint - 2.21.2 | LoadClass: org.apache.camel.component.jms.EndpointMessageListener, resolve: false
2018-08-22T23:14:14,007 | TRACE | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | BundleDelegatingClassLoader      | 48 - org.apache.camel.camel-blueprint - 2.21.2 | FindClass: org.apache.camel.component.jms.EndpointMessageListener
2018-08-22T23:14:14,007 | DEBUG | Blueprint Event Dispatcher: 1 | modelmbean                       |  -  -  | Null Descriptor, creating new.
2018-08-22T23:14:14,007 | WARN  | Camel (passes-staging-producer) thread #9 - JmsConsumer[raw.token.passes] | EndpointMessageListener          | 50 - org.apache.camel.camel-core - 2.21.2 | Execution of JMS message listener failed. Caused by: [org.apache.camel.RuntimeCamelException - java.lang.NullPointerException]
org.apache.camel.RuntimeCamelException: java.lang.NullPointerException
    at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1830) ~[50:org.apache.camel.camel-core:2.21.2]
    at org.apache.camel.component.jms.EndpointMessageListener$EndpointMessageListenerAsyncCallback.done(EndpointMessageListener.java:196) ~[51:org.apache.camel.camel-jms:2.21.2]
    at org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:117) ~[51:org.apache.camel.camel-jms:2.21.2]
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:719) ~[106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:679) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:649) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:317) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:255) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1166) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1158) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1055) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
    at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: java.lang.NullPointerException

And, as I said this error is not always reproducible. Has anyone encountered such issues in the past or present? It would be great to get some directions on this issue.

edit - additional logs:

Message History
---------------------------------------------------------------------------------------------------------------------------------------
RouteId              ProcessorId          Processor                                                                        Elapsed (ms)
[route42           ] [route42           ] [prseai-consumer://queue:raw.token.passes                                   ] [         0]
[route42           ] [enrich21          ] [enrich[constant{prsdw:SELECT TOP 1 Id FROM base.Orders WHERE SourceId = ] [         0]

Stacktrace
---------------------------------------------------------------------------------------------------------------------------------------
java.lang.NullPointerException: null
2018-08-19T17:41:19,576 | WARN  | Camel (prseai-passes-staging-producer) thread #48 - JmsConsumer[raw.token.passes] | EndpointMessageListener          | 50 - org.apache.camel.camel-core - 2.20.3 | Execution of JMS message listener failed. Caused by: [org.apache.camel.RuntimeCamelException - java.lang.NullPointerException]
org.apache.camel.RuntimeCamelException: java.lang.NullPointerException
    at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1831) ~[50:org.apache.camel.camel-core:2.20.3]
    at org.apache.camel.component.jms.EndpointMessageListener$EndpointMessageListenerAsyncCallback.done(EndpointMessageListener.java:195) ~[51:org.apache.camel.camel-jms:2.20.3]
    at org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:116) ~[51:org.apache.camel.camel-jms:2.20.3]
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:719) ~[106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:679) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:649) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:317) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:255) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1166) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1158) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1055) [106:org.apache.servicemix.bundles.spring-jms:4.3.14.RELEASE_1]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
    at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: java.lang.NullPointerException
2018-08-19T17:41:19,576 | ERROR | Camel (prseai-passes-staging-producer) thread #48 - JmsConsumer[raw.token.passes] | DefaultErrorHandler              | 50 - org.apache.camel.camel-core - 2.20.3 | Failed delivery for (MessageId: ID-brckner-ThinkPad-T480-1534693238999-33-43460 on ExchangeId: ID-brckner-ThinkPad-T480-1534693238999-33-43459). Exhausted after delivery attempt: 1 caught: java.lang.NullPointerException

We are using Active MQ 5.15.3 and Camel 2.20.3. Thanks, Cooshal.

cooshal
  • 758
  • 8
  • 21
  • Is there not more in the log, eg the last line should show more where the NPE was really happening. And what version of Camel do you use? – Claus Ibsen Aug 24 '18 at 12:23
  • Hi! I have just updated the question with additional logs. – cooshal Aug 24 '18 at 12:33
  • I suspect the NPE is in your own code in the `DependencyAggregationStrategy`. Maybe try to debug or add some logging in this class and see if you can narrow down the NPE – Claus Ibsen Aug 24 '18 at 14:04
  • Hi! thank you for the response. Well, I will dig deeper into the implementation of DependencyAggregationStrategy. Let's see if this NPE can be narrowed down. – cooshal Aug 25 '18 at 10:15
  • Hi, did you manage to fix this issue? currently i have the same and have no clue what to do with that. Will appreciate your response – Sergii Apostol Oct 25 '18 at 14:52

0 Answers0