Hi Alex, I seem you are sending the message to the direct endpoint before the xml-route is loaded.
Couple of things you may try: 1) Start CamelContext before loading routes 2) Load the camel xml-route with the Camel context (multiple routes can be loaded in the CamelContext, so you just add it to other routes). 3) I personally, when using the Karaf, just drop the files in the deploy folder as explained here: http://liquid-reality.de/Karaf-Tutorial/05/ Raymond On Mon, Sep 26, 2022 at 3:51 PM Domke, Alexander <a.do...@cenit.com.invalid> wrote: > 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 >