Создание файла CSV с использованием Apache Camel Spring

Я пытаюсь создать файл csv из весны верблюда, но получаю сообщение об ошибке. Ниже приведен код, который я разработал:

    <from uri="quartz2://myqyartz?cron=cronexpr"/>
    <to uri="bean:TestProcessor" />
    <marshal>
    <csv> 
    <header>orderId</header>
    <header>amount</header>
    <header>amount2</header>
    <header>amount3</header>
    <header>amount4</header>
    </csv>
    </marshal>
    <to uri="file:/home/user/Terminal?fileName=abc.csv"/>
    </route>

Я также пытался использовать <convertBodyTo type="java.util.List"/>, но это дает мне исключение, поскольку

Преобразователь типов не доступен для преобразования из типа: com.test.TestBean в требуемый тип: java.util.List со значением com.test.TestBean@26cd85e5[name=test,tumber=500,batchId=122,Type=XYZ, c_count=25,Count=14,количество=555]

Здесь TestBean — это мой POJO, и я возвращаю java.util.list объектов TestBean из bean:TestProcessor. Верблюд автоматически свяжет свойства объекта с заголовком или мне нужно написать отдельный класс процессора для преобразования типа, если да, то как преобразовать java.util.list в нужный формат в нем?

Заранее спасибо.


person nik    schedule 16.02.2018    source источник
comment
объяснить не работает   -  person pvpkiran    schedule 16.02.2018


Ответы (1)


Вам нужно добавить шаг маршала в свой маршрут.

<from uri="quartz2://myqyartz?cron=cronexpr"/>
  <transform>
    <simple>this will be file content</simple>
  </transform>
  <process ref="bodyToListProcessor"/>
  <marshal>
    <csv />
  </marshal>
<to uri="file:/home/user/?fileName=abc.csv"/>

<bean id="bodyToListProcessor" class="own.package.MyProcessor"/>

Дополнительную информацию можно найти здесь http://camel.apache.org/csv.html и здесь: http://camel.apache.org/processor.html

Изменить

Чтобы иметь возможность вставить свою модель POJO в виде записей CSV, вы можете использовать «camel-bindy». С помощью этого компонента вы можете привязать формат данных CSV к одному или нескольким объектам POJO.

Например:

<dataFormats>
  <bindy id="bindyDataformat" type="Csv" classType="org.apache.camel.bindy.model.Order"/>
</dataFormats>

<route>
  <from uri="quartz2://myqyartz?cron=cronexpr" />
  <marshal ref="bindyDataformat" />
  <to uri="file:/home/user/?fileName=abc.csv" />
</route>

Для получения дополнительной информации перейдите по следующей ссылке: http://camel.apache.org/bindy.html< /а>

person CookieSoup    schedule 16.02.2018
comment
Спасибо. Я добавил этот код, но получаю это исключение: нет преобразователя типов для преобразования из типа: java.lang.String в требуемый тип: java.util.List со значением, которое будет содержимым файла. Любая идея? - person nik; 17.02.2018
comment
Я понимаю. Проблема в том, что Camel ожидает список до шага маршала. Возможно, вы можете попробовать добавить процессор для обработки основного сообщения в список. - person CookieSoup; 17.02.2018
comment
Еще раз спасибо за ваше редактирование. Теперь я обновил вопрос. Не могли бы вы помочь мне в этом? Я проверил с помощью List‹List‹String››, и он работает нормально, поэтому есть ли способ заставить его работать для List‹CustomBeanObjects› ? - person nik; 19.02.2018
comment
Здравствуйте, я обновил ответ, упомянув о верблюжьей привязке. - person CookieSoup; 20.02.2018
comment
Спасибо за помощь проверю. - person nik; 22.02.2018