Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-10394

BlueprintCamelContext cannot find components created in RouteBuilder.configure method

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 2.18.0
    • 2.18.1, 2.19.0
    • camel-blueprint
    • None
    • Unknown

    Description

      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); }

      }

      Attachments

        Issue Links

          Activity

            People

              davsclaus Claus Ibsen
              hqstevenson Quinn Stevenson
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: