Разбор формата данных csv в apache Camel

Я следовал примеру из книги Верблюд в действии. как маршалировать и демаршалировать формат данных csv. Тем не менее, я хочу разобрать CSV-файл с (разделителем, разделенным запятыми) и разделить тело. Затем я буду использовать контент на основе .choice для распространения сообщений в соответствии с требуемыми задачами. На самом деле, первый и простой пример у меня не сработал. Я использовал верблюд 2.15.6 (camel-core, верблюд-контекст, верблюд-csv, commons-csv) и java 7.

public void configure()
             {
              CsvDataFormat csv = new CsvDataFormat();
              csv.setDelimiter(",");

              from("file:test?noop=true")
             .unmarshal().csv()
              .split(body())
              .to("file:out");
             } 

Ниже приведена трассировка стека.
введите здесь описание изображения


person Chayma Sakouhi    schedule 08.06.2017    source источник
comment
трассировка стека ничего не указывает. Когда вы говорите, что это не сработало для вас. Что происходит.   -  person pvpkiran    schedule 08.06.2017
comment
Программа завершилась без копирования файла .to(file:out);   -  person Chayma Sakouhi    schedule 08.06.2017
comment
где твой тестовый файл? проверьте правильность пути.   -  person pvpkiran    schedule 08.06.2017
comment
Путь правильный, потому что Camel блокирует файл (например, test\standard.csv.camelLock ), после чего программа закрывается. Я не знаю, почему демаршаллинг не работает.   -  person Chayma Sakouhi    schedule 08.06.2017
comment
попробуй без разделения. Я думаю, что для функции разделения требуется токен для разделения, который вы не указываете   -  person pvpkiran    schedule 08.06.2017
comment
тоже не работает   -  person Chayma Sakouhi    schedule 08.06.2017
comment
Пожалуйста, покажите, как вы запускаете свое приложение. Я полагаю, закрыт до того, как Верблюд что-нибудь сделает. Вот некоторая информация об этом: camel.apache .org/   -  person Vyacheslav Enis    schedule 08.06.2017
comment
Это не трассировка стека. Вставьте, пожалуйста, как текст, а не изображение.   -  person Alessandro Da Rugna    schedule 10.06.2017
comment
попробуйте .unmarshal(csv). Unmarshal ссылается на DataFormat.   -  person Sami Nurminen    schedule 21.06.2017


Ответы (2)


Можете попробовать удалить noop=true? На самом деле, если значение noop равно true, файл никак не перемещается и не удаляется. Этот параметр подходит для данных только для чтения или для требований типа ETL.

person Rajani    schedule 26.06.2017

Передайте csv в качестве параметра следующим образом:

public void configure()throws Exception
         {
          CsvDataFormat csv = new CsvDataFormat();
          csv.setDelimiter(",");

          from("file:test?noop=true")
            .unmarshal(csv)
            .split(body())
            .to("file:out");
         } 

Или это поможет вам установить маршрутизацию на основе: я фильтрую в соответствии с заголовком CSV:

//Route 1 for filter CSV based on header
        from("file:/home/r2/Desktop/csvFile?noop=true")
            .choice().when(body().contains("partyName"))
                .to("direct:partyNameCSV")
            .when(body().contains("\"stuffName\""))
                .to("direct:stuffNameCSV")
            .otherwise().endChoice();   

        //Route 2 partyNameCSV
        from("direct:partyNameCSV")
            .unmarshal(csv)
            .process(new PartyNameCSVProcessor())
            .end();

        //Route 3 stuffNameCSV
        from("direct:stuffNameCSV")
            .unmarshal(csv)
            .process(new StuffCSVProcessor())
            .end();
person Rajat.r2    schedule 30.01.2018