Если при запуске маршрута ничего не происходит, то, скорее всего, это связано с относительным путем, который вы передали в файловый компонент. Возможно, каталог выполнения вашего Java процесса находится не там, где вы думаете, и файл не найден. Чтобы упростить вещи, я предлагаю вам начать с абсолютного пути. Когда все остальное заработает, определите правильный относительный путь (ваша база должна быть значением системного свойства user.dir
).
Ваш вопрос о разбиении содержимого: Ответ дан в документации .
Это работает для меня (Верблюд 3.1):
public class CsvRouteBuilder extends EndpointRouteBuilder {
@Override
public void configure() {
DataFormat bindy = new BindyCsvDataFormat(BindyModel.class);
from(file("/tmp?fileName=simpsons.csv"))
.unmarshal(bindy)
.split(body())
.log("Unmarshalled model: ${body}")
.marshal().json()
.log("Marshalled to JSON: ${body}")
// Unique file name for the JSON output
.setHeader(Exchange.FILE_NAME, () -> UUID.randomUUID().toString() + ".json")
.to(file("/tmp"));
}
}
// Use lombok to generate all the boilerplate stuff
@ToString
@Getter
@Setter
@NoArgsConstructor
// Bindy record definition
@CsvRecord(separator = ";", skipFirstLine = true, crlf = "UNIX")
public static class BindyModel {
@DataField(pos = 1)
private String firstName;
@DataField(pos = 2)
private String middleName;
@DataField(pos = 3)
private String lastName;
}
Учитывая этот ввод в /tmp/simpsons.csv
firstname;middlename;lastname
Homer;Jay;Simpson
Marge;Jacqueline;Simpson
вывод журнала выглядит следующим образом
Unmarshalled model: RestRouteBuilder.BindyModel(firstName=Homer, middleName=Jay, lastName=Simpson)
Marshalled to JSON: {"firstName":"Homer","middleName":"Jay","lastName":"Simpson"}
Unmarshalled model: RestRouteBuilder.BindyModel(firstName=Marge, middleName=Jacqueline, lastName=Simpson)
Marshalled to JSON: {"firstName":"Marge","middleName":"Jacqueline","lastName":"Simpson"}
и два json файла записаны в /tmp
.