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

BlueprintCamelContext cannot find components created in RouteBuilder.configure method

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: 2.18.0
    • Fix Version/s: 2.18.1, 2.19.0
    • Component/s: camel-blueprint
    • Labels:
      None
    • Estimated Complexity:
      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

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

                Dates

                • Created:
                  Updated:
                  Resolved: