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