微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Apache Camel Spring Boot Java - 如何将动态值从休息路由传递到来自文件路由?

如何解决Apache Camel Spring Boot Java - 如何将动态值从休息路由传递到来自文件路由?

我有一条 Apache Camel REST 路线。我想从 Postman 调用这个 REST post 路由,我想向它发送包含文件路径的 JSON 内容。然后我想读取该文件路径以在路径 a from file route 中使用它。

到目前为止我有这个:

@Component
    class RestApi extends RouteBuilder {
        @Override
        public void configure() {
            CamelContext context = new DefaultCamelContext();

            restConfiguration()
                    .contextpath(contextpath)
                    .port(serverPort)
                    .enableCORS(true)
                    .apicontextpath("/api-doc")
                    .apiProperty("api.title","Test REST API")
                    .apiProperty("api.version","v1")
                    .apiContextRouteId("doc-api")
                    .component("servlet")
                    .bindingMode(RestBindingMode.json);
            rest("/api/")
                    .id("api-route")
                    .consumes("application/json")
                    .post("/bean")
                    .bindingMode(RestBindingMode.json_xml)
                    .type(MyBean.class)
                    .to("direct:remoteService");
            from("direct:remoteService")
                    .routeId("direct-route")
                    .tracing()
                    .log(">>> ${body.id}")
                    .log(">>> ${body.name}")

                    // I tried calling it with "toD"

但它不起作用。

                    .toD("file://${body.name}?fileName=sources.zip&noop=true&delay=5000&moveFailed=error");
            from("file://${body.name}?fileName=sources.zip&noop=true&delay=5000&moveFailed=error")
                    .tracing()
                    .log(">>> ${body.id}")
                    .log(">>> ${body.name}")
                    .log("Loading zip file ${file:name}")
                    .split(new ZipSplitter())
                    .streaming()
                    .to("direct:another-route");
        }
    }

我尝试使用 toD,但出现以下错误

引起:java.lang.IllegalArgumentException:无效目录:${body.name}。不允许使用 ${ } 占位符的动态表达式。使用 fileName 选项设置动态表达式。

我想获取使用 Postman body.name 发送的路径。我可以获得该值,因为它显示在日志中,然后使用该路径启动 from 文件路径路由,

from("file://${body.name}?fileName=sources.zip&noop=true&delay=5000&moveFailed=error")
                    .tracing()
                    .log(">>> ${body.id}")
                    .log(">>> ${body.name}")
                    .log("Loading zip file ${file:name}")
                    .split(new ZipSplitter())
                    .streaming()
                    .to("direct:another-route");

编辑

我尝试使用 pollEncrich,但我需要传递一个变量,该变量是我从 post 路由 ${body.name} 获得的。如何将该变量传递给 pollEnrich 的路由?

我试过这个,但它不起作用:

rest("/api/")
                    .id("api-route")
                    .consumes("application/json")
                    .post("/bean")
                    .bindingMode(RestBindingMode.json_xml)
                    .type(MyBean.class)
                    .to("direct:remoteService");
            from("direct:remoteService")
                    .routeId("direct-route")
                    .tracing()
                    .log(">>> ${body.id}")
                    .log(">>> ${body.name}")
                    .pollEnrich("file://${body.name}?fileName=sources.zip&noop=true&delay=5000&moveFailed=error")
                    .split(new ZipSplitter())
                    .streaming()
                    .to("direct:process-files");

我收到以下错误

无效目录:${body.name}。不允许使用 ${ } 占位符的动态表达式。使用 fileName 选项设置动态表达式。

解决方法

查看内容丰富器 EIP(文件上的 to 和 toD 是作为新文件写入)您需要的是使用 pollEnrich(内容丰富器)加载现有文件。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。