У меня есть требование в моем проекте обрабатывать CSV-файл построчно. Каждая строка csv будет вызывать оставшийся API, получать данные из API и создавать выходные полезные данные и, наконец, записывать файл.
Итак, предположим, что у меня есть 10 строк в файле csv, каждая строка будет вызывать API, получать данные из API и в конце записывать новый выходной файл xml с 10 сегментами.
Не могли бы вы предложить, какой компонент лучше всего подходит для разделения файла csv на каждую строку. Я предполагаю, что сплиттер или foreach могут служить этой цели. Но я не уверен на 100%. Любая помощь или указатель приветствуются.
ТИА
Ответ 1 · рейтинг 2 · chethan
Код ниже работает для меня
<configuration doc:name="Configuration">
<expression-language autoResolveVariables="true">
<import class="org.mule.util.StringUtils" />
</expression-language>
</configuration>
<flow name="muleutilFlow6">
<file:inbound-endpoint path="C:\path\input sample" connector-ref="File" responseTimeout="10000" doc:name="File"/>
<object-to-string-transformer />
<splitter expression="#[StringUtils.split(message.payload, '\n\r')]" doc:name="Splitter" />
<logger message="Line - #[payload]" level="INFO" doc:name="Logger"/>
Ответ 2 · рейтинг 2 · Manik Magar
Вы можете использовать файл и цикл for -
<flow name="muleutilFlow6">
<file:inbound-endpoint path="input" connector-ref="File" responseTimeout="10000" doc:name="File"/>
<foreach collection="#[payload.split('\n')]]" doc:name="For Each">
<logger message="Line - #[payload]" level="INFO" doc:name="Logger"/>
</foreach>
</flow>
Или вы даже можете использовать пакет -
<flow name="muleutilFlow7">
<file:inbound-endpoint path="input" connector-ref="File" responseTimeout="10000" doc:name="File"/>
<file:file-to-string-transformer name="file-to-string" />
<batch:execute name="muleutilBatch" doc:name="muleutilBatch"/>
</flow>
<batch:job name="muleutilBatch">
<batch:input>
<set-payload value="#[payload.split('\n')]" doc:name="Set Payload"/>
</batch:input>
<batch:process-records>
<batch:step name="Batch_Step">
<logger message="Line - #[payload]" level="INFO" doc:name="Logger"/>
</batch:step>
</batch:process-records>
</batch:job>