如何解决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 举报,一经查实,本站将立刻删除。