Как удалить заголовок csv с помощью apache camel dsl

Чтение содержимого CSV-файла и создание текстового файла в качестве вывода путем удаления только строки заголовка CSV, т. е. первой строки тела. Я могу создать текстовый файл, поместив данные, но как удалить заголовок/первую строку из csv, не могу этого сделать.

с помощью верблюда 2.32.2

Поскольку я новичок в верблюде, я пробовал некоторые подходы, такие как removefirstline/remove header first, которых нет в этой версии. Я хочу, чтобы это было сделано на том же языке dsl, а не путем написания какого-либо процессора и т. д. Ниже приведен базовый код для чтения csv и помещения данных в текстовый файл, но как удалить заголовок csv и поместить остальные данные.

    <route id="convertFileContents">
    <from id="_from1" uri="file:{{INPUT_FILEPATH}}?include=.*.csv&amp;moveFailed={{ERROR_FILEPATH}}&amp;move={{PROCESSED_FILEPATH}}&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

person Anilm    schedule 15.04.2019    source источник


Ответы (1)


Вы можете добиться этого, используя верблюжью привязку и атрибут skipFirstLine.

определить класс POJO: import org.apache.camel.dataformat.bindy.annotation.CsvRecord; импортировать org.apache.camel.dataformat.bindy.annotation.DataField;

@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=.*.csv&noop=true").routeId("test")
  .unmarshal(new BindyCsvDataFormat(test.class))
  .marshal(new BindyCsvDataFormat(test.class))
  .to("file:/test/?fileName=output.txt&fileExist=Append");
person Jesu    schedule 22.04.2019
comment
Я думаю, что должно работать что-то вроде приведенного ниже. › ‹bean id=csv class=org.mycompany.test /› ‹route› ‹ from uri=direct:input/› ‹unmarshal ref=bindyDataformat /› ‹to uri=bean:test /› ‹marshal ref=bindyDataformat /› ‹to uri=bean:test /› ‹to id=to1 uri=file:/test/?fileName=output.txt/› ‹/route› - person Jesu; 26.04.2019