我正在尝试用骆驼暴露其他端点。它将显示一个json数据,该数据位于s3存储桶中存储的某些.json文件中。另外,它还会按日期范围进行过滤。
首先,我在骆驼路线中获得了一些s3对象信息。 (我正在使用Kotlin)
//expose the endpoint
from("jetty:http://0.0.0.0:8080/getObjects")
.routeId("list-objects-on-bucket")
.to("aws-s3://[bucket-name]?amazonS3Client=#s3Client&operation=listObjects")
.process(ListObjects())
.to("direct:filter-list-from-s3")
然后,我过滤数据。 (直到这里一切都还好)
from("direct:filter-list-from-s3")
.routeId("filter-list-from-s3")
.process(FilterObjects())
.to("log:info")
但是在我的FilterObject类中,我不知道如何下载每个匹配的文件(查看if语句)并将其传递到下一个将对其进行处理的路由
class SaoMateusFilterObjects : Processor {
override fun process(exchange: Exchange?) {
val start_date = exchange!!.getIn().getHeader("start_date") as String
val end_date = exchange.getIn().getHeader("end_date") as String
val formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy")
val start = LocalDate.parse(start_date).format(formatter)
val end = LocalDate.parse(end_date).format(formatter)
val objectsNames = exchange!!.getIn().body as LinkedList<String>
for (objectName in objectsNames) {
if(objectName.contains(start) && objectName.contains(end) && objectName.contains(".json")) {
exchange.getIn() to "aws-s3://[bucket-name]?amazonS3Client=#s3Client&operation=getObject&fileName=$objectName"
}
}
}
}
一些问题是:
1-我想阅读。我认为我不能使用from()方法。因为它只能使用一次。因此,to()方法用于读取。
2- exchange.getIn()。to(“ [s3-uri]”)可能/必须在S3Object()中进行转换。怎么样??
有人可以帮我吗?
谢谢
代替.to
路由,使用.bean()
并使用s3.getObject
方法来获取S3Object。
总是优先使用.bean()而不是.processor()。
[offical_s3_java_object操作样本。