Search code examples
javaspring-bootapache-camel

Kamelets in Spring Boot


I try to define a simple kamelet and run it in Camel Spring Boot route.

my-kamelet.kamelet.yaml is located in resources/kamelets

apiVersion: camel.apache.org/v1alpha1
kind: Kamelet
metadata:
  name: my-kamelet
spec:
  template:
    from:
      uri: timer:mykamelet?period=1000
      steps:
        - log: "Executing Kamelet scheduled job"

my routeBuilder

@Component
public class KameletRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception {
         from("kamelet:my-kamelet")
            .log("Executing main route");
    }
}

relevant dependencies in pom.xml

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-spring-boot-starter</artifactId>
        <version>${camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel.springboot</groupId>
        <artifactId>camel-kamelet-starter</artifactId>
        <version>${camel.version}</version>
    </dependency>

When I start the application i get following error:

ERROR 20372 --- [kamelet-poc] [ restartedMain] o.s.boot.SpringApplication : Application run failed

org.apache.camel.FailedToCreateRouteException: Failed to create route route1: Route(route1)[From[kamelet:my-kamelet] -> [Log[Executing mai... because of No endpoint could be found for: kamelet://my-kamelet, please check your classpath contains the needed Camel component jar.

I guess am missing something stupid but I am not able to discover what.


Solution

  • The missing part was camel-yaml-dsl dependency

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-yaml-dsl</artifactId>
            <version>${camel.version}</version>
        </dependency>