Как перебрать содержимое файла в Mule

У меня есть текстовый файл в определенном каталоге. Я должен прочитать содержимое файла и сделать для этого вызов API.

  1. Я использовал файловый коннектор для чтения файла
  2. Я использовал преобразователь «Файл в массив байтов» для каждой области
  3. В приведенном ниже примере я использовал logger. Но мне нужно сделать HTTP-запрос к исходящей конечной точке.

Но получая следующее сообщение
org.mule.routing.ExpressionSplitter: выражение не соответствует типу, который можно разделить: [B

Ниже приведено содержимое мула xml. Кто-нибудь может мне помочь?

<file:connector name="File_Input" autoDelete="false" streaming="true" validateConnections="true" doc:name="File"/>

<flow name="testxmlFlow1" doc:name="testxmlFlow1"> 
    <file:inbound-endpoint path="C:\mule_program_test\input" responseTimeout="10000" doc:name="File" moveToPattern="data.txt" connector-ref="File_Input"></file:inbound-endpoint>
    <file:file-to-byte-array-transformer doc:name="File to Byte Array"/>
    <foreach doc:name="For Each" collection="#[payload]">
        <logger message="Messagesssssssssssssss" level="INFO" doc:name="Logger"/>
    </foreach>
</flow>

person Lakshmisri    schedule 16.09.2014    source источник


Ответы (1)


Вам не нужно использовать foreach для обработки каждого файла по очереди, потому что коннектор файлов генерирует сообщение для каждого файла, который он обнаруживает в каталоге. Ваш поток будет выполняться для каждого файла, помещенного в этот каталог.

Кроме того, коннектор файлов отслеживает каталог, время от времени проверяя наличие новых файлов в соответствии со своей частотой опроса. Поскольку вы не указали его, я думаю, что по умолчанию установлено значение 1000 мс, что означает, что он будет обрабатывать все файлы в каталоге каждую секунду. Кроме того, вы настроили autoDelete="false" и не настроили moveToDirectory. Это означает, что файлы останутся в каталоге C:\mule_program_test\input после обработки, и поэтому они будут снова обрабатываться в каждом цикле опроса.

Если вы хотите обработать каждый файл только один раз, используйте moveToDirectory и/или autoDelete, чтобы гарантировать, что он не будет обработан снова в следующем цикле опроса.

person Ryan Hoegg    schedule 16.09.2014
comment
Привет, Райан, мой файл представляет собой текстовый файл, и в каждой строке есть список идентификаторов. Я хочу сделать вызов API для каждого идентификатора внутри файла. Вот почему я хотел бы реализовать для каждой области. - person Lakshmisri; 16.09.2014
comment
Выражение, которое вы даете for-each, не возвращает коллекцию, поэтому вы получаете сообщение об ошибке, которое видите. Попробуйте изменить его на #[payload.split('\n')] - person Ryan Hoegg; 18.09.2014
comment
Привет Райан. Большое спасибо. Это сработало. Я подключил HTTP-коннектор и вызвал API. - person Lakshmisri; 19.09.2014