felix-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Bengt Rodehav <be...@rodehav.com>
Subject iPOJO and CamelContext problems (was "Problems triggering a camel route in OSGi")
Date Mon, 30 May 2011 12:49:26 GMT
I sent the mail below to the Camel mailing list but I'm beginning to think
that it is more of an iPOJO problem than a Camel problem. I would really
appreciate any help since this is extremely confusing to me.


I have a very strange problem that is probably related to classloading. I
use Camel 2.7.1 in Karaf 2.2.0 together with iPOJO.

I create my camel context like this:

  public void start() {
    CamelContextFactory factory = new CamelContextFactory();
    mCamelContext = factory.createContext();
    RouteBuilder builder = createRouteBuilder();
    try {
    } catch (Exception e) {
    try {
    } catch (Exception e) {
    System.out.println("start, mCamelContext: " + mCamelContext);

It is created when the iPOJO component becomes valid. I get the bundle
context in my constructor from iPOJO. The actual routes are created like

  private RouteBuilder createRouteBuilder() {
    RouteBuilder builder = new RouteBuilder() {

      from("file:localdir").process(new Processor() {
        public void process(Exchange theExchange) throws Exception {


Both routes works fine. When dropping a file in the "localdir", the
trigger() method is called that in turn will send an exchange to the
"direct:start" endpoint that will do the real work. The trigger method looks
like this:

*  public void trigger() {    *
    System.out.println("trigger, mCamelContext: " + mCamelContext);
    ProducerTemplate producer = mCamelContext.createProducerTemplate();*
*    Map<String, Object> headers = new HashMap<String, Object>();*
*    // ...populate headers*
*    String body;*
*    // ... initialize body*
*    producer.sendBodyAndHeaders("direct:start", body, headers);*
*  }*
Dropping the file in "localdir" is just for testing purposes. In real life,
the "direct:start" route is meant to be triggered via a published  OSGi
service (actually through a web service call). However, this does not work
at all.

Whenever I try to call the trigger() method from somewhere else, the
mCamelContext member is null and I get a NPE when trying to create the
producer template. Why is that?

I realize that this might not be a Camel problem but a OSGi/iPOJO problem
but it's definitely related to Camel. I checked what class loader is being
used to for the mCamelContext instance and it turns out to be the
camel-spring bundle's class loader. Could that be related to my problems?

I am very confused about this and would appreciate any help,


  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message