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

#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 «/> </маршрут>