【问题标题】:Camel-K does not recognize local packageCamel-K 不识别本地包
【发布时间】:2021-11-05 03:49:43
【问题描述】:

我有一个使用自己的处理器的 RouteBuilder 类。使用 Maven 在 Camel 中本地运行时,它运行良好。但是,当我尝试使用 camel-k 时,它说找不到包。我有什么需要做的吗?

我的处理器

package com.test.processor;

import java.io.File;

import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
import org.apache.camel.component.file.GenericFile;

public class MyProcessor implements Processor {

    public void process(Exchange exchange) throws Exception {
        Message inMsg = exchange.getIn();
        Object body = inMsg.getBody();
        
        if (body instanceof File) {
            System.out.println("Is a FILE");
        } else {
            System.out.println("Not a FILE");   
        }
        
        if (body instanceof GenericFile) {
            System.out.println("Is a GF for sure");
            GenericFile gf = (GenericFile) body;
            String fileName = gf.getFileName();
            
            System.out.println("Filename: " + fileName);
        } else {
            System.out.println("NOT a GF");
        }
    }
}

路由器

package com.javainuse.route;

import org.apache.camel.builder.RouteBuilder;
import com.test.processor.MyProcessor;

public class SimpleRouteBuilder extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        // Transfer files from one another using a processor
        from("file:C:/inputFolder?noop=true")
            .process(new MyProcessor())
            .to("file:C:/outputFolder")
            .setBody().simple("Test")
            .log("Test log");
    }
}

我正在使用minikube 并运行以下命令: kamel run SimpleRouteBuilder.java --dev

[1] Exception in thread "main" org.apache.camel.RuntimeCamelException: org.joor.ReflectException: Compilation error: /com/test/route/SimpleRouteBuilder.java:4: error: package com.test.processor does not exist
[1] import com.test.processor.MyProcessor;

【问题讨论】:

    标签: java apache-camel apache-camel-k


    【解决方案1】:

    这是意料之中的,因为 camel-k 不知道在哪里可以找到适合您的处理器的类,因此您有两种选择:

    1. 将处理器作为路由的内部类嵌入
    2. 将您的处理器打包为 maven 工件(您也可以使用 jitpack 以避免在测试时将其发布到 maven 存储库)并将其列为任何其他依赖项

    【讨论】:

    • 它是否也支持file:/path/to/dep.jargithub.com/apache/camel-k/issues/49 格式?
    • 不,它没有,工件需要在 maven repo 上(或使用 jitpack 让事情变得更容易)
    • 我关注了文档from("activemq:myQueue").process(MyProcessor.class);,但它无法解析我的处理器,文档是否已过期?这是否意味着我必须让处理器成为路由类的内部类?谢谢。
    • 这取决于您如何提供 MyProcessor 类,是来自 jar 吗?
    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 2014-11-07
    • 1970-01-01
    • 2016-05-08
    • 2019-12-15
    相关资源
    最近更新 更多