Spring boot 使用ApacheCamel获取S3对象

Spring boot 使用ApacheCamel获取S3对象,spring-boot,amazon-s3,apache-camel,Spring Boot,Amazon S3,Apache Camel,我试图用camel公开rest端点。它将显示存储在s3 bucket中的一些.json文件中的json数据。此外,它将按日期范围进行过滤 首先,我在骆驼路线中获得了一些s3对象信息。(我正在使用kotlin) 然后,我过滤数据。(直到这里一切都好了) 但是在我的FilterObject类中,我不知道如何下载每个匹配的文件(查看if语句)并将其传递给下一个处理它们的路由 class SaoMateusFilterObjects : Processor { override fun proc

我试图用camel公开rest端点。它将显示存储在s3 bucket中的一些.json文件中的json数据。此外,它将按日期范围进行过滤

首先,我在骆驼路线中获得了一些s3对象信息。(我正在使用kotlin)

然后,我过滤数据。(直到这里一切都好了)

但是在我的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"
            }
        }
    }

}
SaomateusFilterObject类:处理器{
覆盖有趣的过程(交换:交换?){
val start_date=exchange!!.getIn().getHeader(“start_date”)作为字符串
val end_date=exchange.getIn().getHeader(“end_date”)作为字符串
val formatter=DateTimeFormatter.of模式(“dd-MM-yyyy”)
val start=LocalDate.parse(start\u date).format(格式化程序)
val end=LocalDate.parse(end\u date).format(格式化程序)
val objectsNames=exchange!!.getIn().body作为链接列表
for(objectsNames中的objectName){
if(objectName.contains(开始)&&objectName.contains(结束)&&objectName.contains(“.json”)){
exchange.getIn()到“aws-s3://[bucket name]?amazonS3Client=#s3Client&operation=getObject&fileName=$objectName”
}
}
}
}
有些问题是:

我想读书。我想我不能使用from()方法。因为它只能使用一次。因此,to()方法用于读取

2-exchange.getIn()到(“[S3URI]”)可能/必须在S3Object()中转换。怎么做

有人能帮我吗


谢谢您

而不是
。要
路由,请使用
.bean()
并使用
s3.getObject
方法获取S3Object

总是喜欢使用.bean()而不是.processor()

操作样本

from("direct:filter-list-from-s3")
                .routeId("filter-list-from-s3")
                .process(FilterObjects())
                .to("log:info")
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"
            }
        }
    }

}