Quinn Stevenson created CAMEL-10394:
---------------------------------------

             Summary: BlueprintCamelContext cannot find components created in 
RouteBuilder.configure method
                 Key: CAMEL-10394
                 URL: https://issues.apache.org/jira/browse/CAMEL-10394
             Project: Camel
          Issue Type: Bug
          Components: camel-blueprint
            Reporter: Quinn Stevenson
            Assignee: Grzegorz Grzybek


When a simple java RouteBuilder that creates a component and adds it to the 
context in the configure method is used in a blueprint, the context cannot find 
the component.

Example Builder:
public class TimerRouteBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        TimerComponent timerComponent = new TimerComponent();

        getContext().addComponent("my-timer", timerComponent);

        from( "my-timer://test-timer")
                .log("Timer Fired")
                .to("mock://result");
    }
}

Example Blueprint:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
           xsi:schemaLocation="
                 http://www.osgi.org/xmlns/blueprint/v1.0.0 
https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
                 http://camel.apache.org/schema/blueprint 
http://camel.apache.org/schema/blueprint/camel-blueprint.xsd";>

    <bean id="timer-route-builder" 
class="com.pronoia.camel.builder.TimerRouteBuilder"/>

    <camelContext id="blueprint-context" 
xmlns="http://camel.apache.org/schema/blueprint";>
        <routeBuilder ref="timer-route-builder"/>
    </camelContext>

</blueprint>

This test fails:
public class BlueprintTest extends CamelBlueprintTestSupport {
    @EndpointInject(uri = "mock://result")
    MockEndpoint result;

    @Override
    protected String getBlueprintDescriptor() {
        return "/OSGI-INF/blueprint/blueprint.xml";
    }

    @Test
    public void testRoute() throws Exception {
        result.expectedMessageCount(5);

        assertMockEndpointsSatisfied(10, TimeUnit.SECONDS);
    }

}

But this test passes
public class CamelTest extends CamelTestSupport {

    @EndpointInject(uri = "mock://result")
    MockEndpoint result;

    @Override
    protected RoutesBuilder createRouteBuilder() throws Exception {
        return new TimerRouteBuilder();
    }

    @Test
    public void testRoute() throws Exception {
        result.expectedMessageCount(5);

        assertMockEndpointsSatisfied(10, TimeUnit.SECONDS);
    }
}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to