apache / camel-karavan

Apache Camel Karavan a Low-code Data Integration Platform
https://camel.apache.org
Apache License 2.0
445 stars 152 forks source link

Create Bean java.lang.ClassNotFoundException #1063

Closed rapetum228 closed 9 months ago

rapetum228 commented 9 months ago

I want to use integration using Camel Karavan. The essence of integration is to receive messages from REST service and transfer them to RabbitMq. To create a connection to RabbitMq I made Bean.

Here is my yaml file:

- rest:
    id: rest-6f81
    post:
      - id: post-78d2
        path: /test
        to: direct:internal
        consumes: application/json
- beans:
    - constructors: {}
      name: RabbitMQConnectionFactory
      properties:
        host: 'localhost'
        port: '5672'
        username: Test
        password: Test
      type: org.springframework.amqp.rabbit.connection.CachingConnectionFactory
- route:
    id: route-d7a0
    nodePrefixId: route-425
    from:
      id: from-b82a
      uri: direct
      parameters:
        name: internal
      steps:
        - log:
            id: log-90a7
            message: ${body}
        - to:
            id: to-bcd8
            uri: spring-rabbitmq
            parameters:
              exchangeName: test
              testConnectionOnStartup: true
              connectionFactory: '#bean:RabbitMQConnectionFactory'

At startup.

jbang "-Dcamel.jbang.version=4.3.0" camel@apache/camel run *

I get the following error logs:

2024-01-10 22:44:26.558  INFO 29564 --- [           main] org.apache.camel.main.MainSupport   : Apache Camel (JBang) 4.3.0 is starting
2024-01-10 22:44:26.590  INFO 29564 --- [           main] org.apache.camel.main.MainSupport   : Additional files added to classpath: event-gateway.json                                                                                                                                         in general
2024-01-10 22:44:26.695  INFO 29564 --- [           main] org.apache.camel.main.MainSupport   : Using Java 17.0.9 with PID 29564. Started by User in C:\Users\user\Desktop\Karavan1
org.apache.camel.RuntimeCamelException: Error pre-parsing resource: file:testts.camel.yaml
        at org.apache.camel.dsl.yaml.YamlRoutesBuilderLoader.preParseRoute(YamlRoutesBuilderLoader.java:913)
        at org.apache.camel.main.RoutesConfigurer.doConfigureModeline(RoutesConfigurer.java:374)
        at org.apache.camel.main.RoutesConfigurer.configureModeline(RoutesConfigurer.java:300)
        at org.apache.camel.main.BaseMainSupport.modelineRoutes(BaseMainSupport.java:594)
        at org.apache.camel.main.BaseMainSupport.autoconfigure(BaseMainSupport.java:447)
        at org.apache.camel.main.MainSupport.autoconfigure(MainSupport.java:73)
        at org.apache.camel.main.KameletMain.autoconfigure(KameletMain.java:626)
        at org.apache.camel.main.BaseMainSupport.postProcessCamelContext(BaseMainSupport.java:672)
        at org.apache.camel.main.MainSupport.initCamelContext(MainSupport.java:339)
        at org.apache.camel.main.KameletMain.doInit(KameletMain.java:314)
        at org.apache.camel.support.service.BaseService.init(BaseService.java:78)
        at org.apache.camel.support.service.BaseService.start(BaseService.java:105)
        at org.apache.camel.dsl.jbang.core.commands.Run.runKameletMain(Run.java:1059)
        at org.apache.camel.dsl.jbang.core.commands.Run.run(Run.java:781)
        at org.apache.camel.dsl.jbang.core.commands.Run.doCall(Run.java:290)
        at org.apache.camel.dsl.jbang.core.commands.CamelCommand.call(CamelCommand.java:71)
        at org.apache.camel.dsl.jbang.core.commands.CamelCommand.call(CamelCommand.java:36)
        at picocli.CommandLine.executeUserObject(CommandLine.java:2041)
        at picocli.CommandLine.access$1500(CommandLine.java:148)
        at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2461)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2453)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2415)
        at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2273)
        at picocli.CommandLine$RunLast.execute(CommandLine.java:2417)
        at picocli.CommandLine.execute(CommandLine.java:2170)
        at org.apache.camel.dsl.jbang.core.commands.CamelJBangMain.run(CamelJBangMain.java:172)
        at main.CamelJBang.main(CamelJBang.java:36)
Caused by: java.lang.RuntimeException: Error creating bean: RabbitMQConnectionFactory of type: #class:org.springframework.amqp.rabbit.connection.CachingConnectionFactory
        at org.apache.camel.dsl.yaml.deserializers.BeansDeserializer.registerBean(BeansDeserializer.java:212)
        at org.apache.camel.dsl.yaml.deserializers.BeansDeserializer$BeansCustomizer.configure(BeansDeserializer.java:235)
        at org.apache.camel.dsl.yaml.YamlRoutesBuilderLoader.preParseNode(YamlRoutesBuilderLoader.java:933)
        at org.apache.camel.dsl.yaml.YamlRoutesBuilderLoader.lambda$preParseRoute$5(YamlRoutesBuilderLoader.java:911)
        at java.base/java.util.Optional.map(Optional.java:260)
        at org.apache.camel.dsl.yaml.YamlRoutesBuilderLoader.preParseRoute(YamlRoutesBuilderLoader.java:911)
        ... 26 more
Caused by: java.lang.ClassNotFoundException: org.springframework.amqp.rabbit.connection.CachingConnectionFactory
        at org.apache.camel.impl.engine.DefaultClassResolver.resolveMandatoryClass(DefaultClassResolver.java:113)
        at org.apache.camel.support.PropertyBindingSupport.resolveBean(PropertyBindingSupport.java:1566)
        at org.apache.camel.dsl.yaml.deserializers.BeansDeserializer.newInstance(BeansDeserializer.java:185)
        at org.apache.camel.dsl.yaml.deserializers.BeansDeserializer.registerBean(BeansDeserializer.java:204)
        ... 31 more

I think the key problem is this: java.lang.ClassNotFoundException: org.springframework.amqp.rabbit.connection.ConnectionFactory But org.springframework.amqp.rabbit.connection.ConnectionFactory is existed in Spring RabbitMQ.

Can anyone tell me how to fix this? I'm new to Camel and really don't understand what might be missing. Maybe I'm missing something small.

I use camel-karavan as VS Code extension. Same error when running through docker.

UPD. Added file application.properties

camel.karavan.project-id=test
camel.karavan.project-name=test
camel.karavan.project-description=bnjbnln
camel.jbang.gav=org.camel.karavan.demo:test:1
camel.jbang.runtime=camel-main
camel.jbang.version=4.3.0
camel.jbang.dependencies=camel-console,camel-platform-http-main
camel.jbang.jib-maven-plugin-version=3.4.0
camel.server.enabled=true
camel.server.healthCheckEnabled=true
camel.server.devConsoleEnabled=true
camel.main.tracingStandby=true
camel.main.autoConfigurationFailFast=false
camel.context.dev-console=true
camel.health.enabled=true
camel.health.exposure-level=full
jkube.version=1.15.0
jib.from.image=gcr.io/distroless/java17@sha256:3a4ea21bd7b412b8b6ae61313b39337d8f03bb6844013810e8e4625d8c765edb
spring.rabbitmq.password=Test
spring.rabbitmq.port=5672
spring.rabbitmq.host=localhost
spring.rabbitmq.username=Test
dpalinic commented 9 months ago

Try adding camel-spring-rabbitmq dependency for camel.jbang.dependencies in application.properties and see if it will help.

rapetum228 commented 9 months ago

@dpalinic thank you very much, its work!!!