Hello all,

I am trying to load an external route from a blueprint XML file and it is not 
working. Has anyone done this before and has a tip for me? I am using camel 
3.18.2 and Karaf 4.4.1.

My Test Implementation:

package testbundle;

import java.io.File;
import java.nio.file.Files;

import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.blueprint.BlueprintCamelContext;
import org.apache.camel.spi.Resource;
import org.apache.camel.support.DefaultExchange;
import org.apache.camel.support.ResourceHelper;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

@Component(
    immediate = true,
    service = TestBundle.class,
    property = {"osgi.command.scope=test", "osgi.command.function=loadRoutes"})
public class TestBundle {

  public BlueprintCamelContext camelContext;

  @Reference(target = "(camel.context.name=dummyCamelContext)")
  public void bindCamelContext(CamelContext camelContext) {
    this.camelContext = (BlueprintCamelContext) camelContext;
  }

  public void unbindCamelContext() {
    camelContext = null;
  }

  public void loadRoutes() throws Exception {
    loadRoute("C:\\tmp\\before_create.xml", camelContext);
    camelContext.start();
    Exchange exchange = new DefaultExchange(camelContext);
    ProducerTemplate producerTemplate = 
exchange.getContext().createProducerTemplate();
    Exchange resultExchange = producerTemplate.send("direct:start", exchange);
    System.out.println("resultExchange: " + resultExchange);

    if (resultExchange.getException() != null) {
      throw resultExchange.getException();
    }
  }

  private void loadRoute(String name, BlueprintCamelContext camelContext) {
    ExtendedCamelContext ecc = camelContext.adapt(ExtendedCamelContext.class);
    try {
      File file = new File(name);
      byte[] content = Files.readAllBytes(file.toPath());
      Resource resource = ResourceHelper.fromBytes(file.getAbsolutePath(), 
content);
      ecc.getRoutesLoader().loadRoutes(resource);
      System.out.println("ecc routes: " + ecc.getRoutes());
      System.out.println("camelContext routes: " + 
camelContext.getRouteDefinitions());

    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
}

My Blueprint with camel context:


<?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"; 
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"; 
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"; 
xmlns:enc="http://karaf.apache.org/xmlns/jasypt/v1.0.0"; xsi:schemaLocation="

       http://www.osgi.org/xmlns/blueprint/v1.0.0 
http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd";>

    <camelContext xmlns="http://camel.apache.org/schema/blueprint"; 
id="dummyCamelContext">

        <route id="create" autoStartup="true">

            <from uri="direct:dummyStart" />

            <to uri="mock:dummyEnd" />

        </route>

    </camelContext>

</blueprint>


My Route to load:


<?xml version="1.0" encoding="UTF-8"?>

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";>

    <routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns="http://camel.apache.org/schema/blueprint"; xsi:schemaLocation="

            http://camel.apache.org/schema/blueprint

            http://camel.apache.org/schema/blueprint/camel-blueprint.xsd";>



        <route id="xml-route" autoStartup="true">

            <from uri="direct:start" />

            <log message="Hello XML!" />

        </route>

    </routes>

</blueprint>


Error executing command: No consumers available on endpoint: direct://start. 
Exchange[]

I am at a loss, do you have any idea what I am doing wrong?

Greeting
Alex

CENIT AG, Industriestrasse 52-54, 70565 Stuttgart, Tel.: +49 711 7825-30, Fax: 
+49 711 7825-4000, Internet: www.cenit.com
Geschaeftsstellen (Branch Offices): Berlin, Frankfurt, Hamburg, Hannover, 
Muenchen, Oelsnitz, Ratingen, Saarbruecken
Vorstandsmitglieder (Members of the Board): Peter Schneck, Dr. Markus Wesel
Aufsichtsratsmitglieder (Supervisory Board Members): Rainer Koppitz 
(Vorsitzender des Aufsichtsrats / Chairman of the Supervisory Board), Prof. Dr. 
Isabell Welpe, Ricardo Malta
Bankverbindungen (Bank Accounts):
Deutsche Bank (BLZ 600 700 70) Kto. 1661 040 IBAN : DE85 6007 0070 0166 1040 00 
SWIFT-CODE : DEUTDESS,
Commerzbank (BLZ 600 400 71) Kto. 532 015 500 IBAN : DE83 6004 0071 0532 0155 
00 SWIFT-Code : COBADEFF600,
Registergericht (Registry court): Amtsgericht Stuttgart
Handelsregister (Commercial Register): HRB Nr. 19117
Umsatzsteuer (VAT) ID: DE 147 862 777

Reply via email to