Olá Marcos, tudo bem?
Para acumular os objetos (arquivos .json) que atendem às condições do seu if e enviá-los para a próxima rota no Apache Camel, você pode usar a função aggregate para agrupar esses objetos em uma lista.
Por exemplo:
from("rest:GET:/seu-endpoint")
.process(object : 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>
val filteredObjects = ArrayList<String>()
for (objectName in objectsNames) {
if (objectName.contains(start) && objectName.contains(end) && objectName.contains(".json")) {
filteredObjects.add(objectName)
}
}
exchange.setProperty("filteredObjects", filteredObjects)
}
})
.split().property("filteredObjects")
.to("aws-s3://publish-schedule-events?amazonS3Client=#s3Client&operation=getObject")
.aggregate(constant(true)).completionSize(1000) // Ajuste o tamanho de acordo com suas necessidades
.completionTimeout(5000) // Ajuste o tempo limite de acordo com suas necessidades
.marshal().json(JsonLibrary.Jackson)
.to("rest:POST:/outra-rota")
A função aggregate acumula os objetos novamente em uma lista com um tamanho de conclusão especificado (neste exemplo, completionSize(1000) significa que a lista será completada quando atingir 1000 objetos, mas você pode ajustar esse valor conforme necessário).