#java #spring #apache-camel #dsl #spring-camel
#java #весна #апач-верблюд #dsl #spring-верблюд
Вопрос:
Чтение содержимого файла csv и создание текстового файла в качестве выходных данных путем удаления только строки заголовка csv, то есть первой строки тела. Я могу сгенерировать текстовый файл, поместив данные, но как удалить заголовок / первую строку из csv, не удается это сделать.
использование camel 2.32.2
Поскольку я новичок в camel, я попробовал некоторые подходы, такие как removefirstline / remove header first, которых нет в этой версии. Я хочу, чтобы это было сделано на том же языке dsl, а не путем написания какого-либо процессора и т. Д. Ниже Приведен базовый код для чтения csv и переноса данных в текстовый файл, но как удалить заголовок csv и поместить остальные данные.
<route id="convertFileContents">
<from id="_from1" uri="file:{{INPUT_FILEPATH}}?include=.*.csvamp;amp;moveFailed={{ERROR_FILEPATH}}amp;amp;move={{PROCESSED_FILEPATH}}amp;amp;noop=false" />
<log id="_log1" message="CONTENTS OF THE CSV BEFORE TRANFORMATION-->${body}" />
<convertBodyTo id="_convertBodyTo1" type="java.lang.String" />
<setHeader headerName="fName" id="_setHeader1">
<simple>${file:onlyname.noext}</simple>
</setHeader>
<setBody id="_setBody1">
<simple>${body}</simple>
</setBody>
<log id="_log2" message="CONTENTS OF THE CSV AFTER TRANFORMATION-->${body}" />
<to id="_to2" uri="file:{{GENERATED_FILEPATH}}?fileName=${headers.fName}.txt" />
</route>
ввод файла: csv
Accident Description,Reported By,Date Of Loss,Reported Date
car hit,john,4/20/2012,11-Apr-19
Crane fell,john,9/1/2011,11-Apr-19
ожидаемый результат файла: текст
car hit,john,4/20/2012,11-Apr-19
Crane fell,john,9/1/2011,11-Apr-19
Ответ №1:
Вы можете достичь этого, используя camel bindy и атрибут skipFirstLine.
определите класс POJO: импортируйте org.apache.camel.dataformat.bindy.annotation.CsvRecord; импортировать org.apache.camel.dataformat.bindy.annotation.Поле данных;
@CsvRecord(separator = ",", skipFirstLine = true)
public class test
{
@DataField(pos = 1)
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@DataField(pos = 2)
private String age;
public String getAge() {
return age;
}
В вашем маршруте вы можете отменить разметку, как показано ниже
from("file:/test?include=.*.csvamp;noop=true").routeId("test")
.unmarshal(new BindyCsvDataFormat(test.class))
.marshal(new BindyCsvDataFormat(test.class))
.to("file:/test/?fileName=output.txtamp;fileExist=Append");
Комментарии:
1. Я думаю, что должно сработать что-то вроде приведенного ниже .. <идентификатор компонента =»bindyDataformat» class=»org.apache.camel.dataformat.bindy.csv.BindyCsvDataFormat»> <значение конструктора arg= «org.apache.camel.bindy.model» /> </bean> <идентификатор компонента =»csv» class=»org.mycompany.test» /> <route> <из uri=»direct:input»/> <unmarshal ref=»bindyDataformat» /> <в uri=»bean:test» /> <marshal ref=»bindyDataformat» /> <в uri=»bean:test» /> <to id=»to1″ uri=»file:/test/?fileName=output.txt «/> </маршрут>