I'm using Camel 2.4.10. I'm get a NPE in RouteContextProcessor at line 42:
29 public class RouteContextProcessor extends DelegateAsyncProcessor {
...
38 @Override
39 protected boolean processNext(final Exchange exchange, final
AsyncCallback callback) {
40 // push the current route context
41 if (exchange.getUnitOfWork() != null) {
42 exchange.getUnitOfWork().pushRouteContext(routeContext);
43 }
I am able to demonstrate that even though the test in line 41 is true,
getUnitOfWork() in null in line 43. I do this by instrumenting the code as
follows:
@Override
protected boolean processNext(final Exchange exchange, final
AsyncCallback callback) {
// push the current route context
try {
if (exchange.getUnitOfWork() != null) {
exchange.getUnitOfWork().pushRouteContext(routeContext);
}
} catch (Exception e) {
System.out.println("********************\n"+exchange);
System.out.println(exchange.getUnitOfWork());
e.printStackTrace();
System.exit(1);
}
And I can clearly see the null value. This implies to me somebody else has
a reference to the same exchange object and is changing it between lines 42
and line 43. This only happens occasionally (1 in 1000 times).
My code has 10 threads, so I wouldn't be surprised if it was my problem, but
I just can't see it. I am not doing anything with the UnitOfWork in an
exchange. At most, I change the body of the Message and perhaps the
headers.
This is very difficult to debug because it happens so infrequently. Does
anyone have a suggestion that could help me?
--
View this message in context:
http://camel.465427.n5.nabble.com/NPE-in-RouteContextProcessor-tp5716620.html
Sent from the Camel - Users mailing list archive at Nabble.com.