在 mule 中逐行处理文件

Processing files line by line in mule

我的项目要求逐行处理一个csv文件。 csv 的每一行都将调用 rest api,从 api 获取数据并构建输出负载,最后写入一个文件。

所以假设我在 csv 文件中有 10 行,每行将调用 api,从 api 获取数据,最后写入包含 10 个段的新 xml 输出文件.

那么,您能否建议哪个组件最适合将 csv 文件拆分为每一行。我假设 splitter 或 foreach 可以达到目的。但我不是 100% 确定。感谢任何帮助或指点。

TIA

您可以进行如下配置:

  1. 文件连接器(读取 CSV)
  2. DataWeave(将 CSV 转换为 Java MapXML
  3. Collection Splitter(迭代地图)
  4. 调用API并进一步处理数据
  5. 文件连接器(写入XML)

或参考这个例子:Using Mule Studio to read CSV...。但是您需要进一步修改才能达到要求。

你可以使用文件和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>

下面的代码适合我

<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"/>