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