Как читать текстовый файл в муле 3.8

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

Вот поток xml

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

flow name="DW-FixedWidth-Processing">

file:inbound-endpoint path="D:/mule/input" connector-ref="File" responseTimeout="10000" doc:name="File"/>

file:file-to-string-transformer doc:name="File to String"/>

dw:transform-message doc:name="Transform Message">

dw:input-payload />

dw:set-payload><![CDATA[%dw 1.0
%output application/csv header=false
---
    ((payload splitBy /\n/)[0..8]) map {
    location:trim $[0..14],
    sku:trim $[15..39],
    dtc:trim $[40..42],
    tt:trim $[43..44],
    txnqty:trim $[45..54],
    um:trim $[55..56],
    rcd:trim $[57..59],
    te:trim $[60..89],
    ul:trim $[90..104],
    date:trim $[105..114],
    time:trim $[115..120]
} ]]>
dw:set-payload>

dw:transform-message>

logger message="#[message.payloadAs(java.lang.String)]" level="INFO" doc:name="Logger"/>

file:outbound-endpoint path="D:/mule/output" responseTimeout="10000" doc:name="File"/>

исключение

Трассировка корневого исключения:

java.lang.IllegalStateException: не задана схема на com.mulesoft.weave.module.flatfile.FlatFileSettings.loadSchema(FlatFileSettings.scala:45) на com.mulesoft.weave.module.flatfile.FlatFileReader.ffParser(FlatFileReader.FealsReader).)

4 ответа

При отключении потоковой передачи в файловом соединителе вам больше не нужно

<object-to-string/>

Вы можете настроить DataWeave на использование схемы плоского файла, как уже говорилось в другом ответе.

Если вы хотите использовать его так, как нужно, вы должны указать правильный тип пантомимы, в данном случае это

application/java

Вы можете сделать это на любом обработчике сообщений до DataWeave, в данном случае file: inbound-endpoint. Или вы можете сделать это в самом DataWeave (к сожалению, это видно только при переключении Studio на XML).

У меня все работало со следующим потоком:

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

    <flow name="dw-testFlow">
        <file:inbound-endpoint path="in" moveToDirectory="processed" connector-ref="File" responseTimeout="10000" mimeType="application/java" doc:name="File">
            <file:filename-regex-filter pattern=".*\.txt" caseSensitive="true"/>
        </file:inbound-endpoint>
        <dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/java
---
((payload splitBy /\n/)) map {
location:trim $[0..14],
sku:trim $[15..39],
dtc:trim $[40..42],
tt:trim $[43..44],
txnqty:trim $[45..54],
um:trim $[55..56],
rcd:trim $[57..59],
te:trim $[60..89],
ul:trim $[90..104],
date:trim $[105..114],
time:trim $[115..120]
}
]]></dw:set-payload>
        </dw:transform-message>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
    </flow>

Результатом DataWeave является список HashMap.

DW в настоящее время не поддерживает отображение из неструктурированной строки, даже если вы объявляете MIME Type = text/plain upstream и устанавливаете для метаданных входной полезной нагрузки значение String в процессоре сообщений преобразования.

Поддерживаемые форматы данных (согласно документации Mule): Java, XML, JSON, CSV, Flat File, Excel, Fixed Width и Cobol copybook.

Дело здесь явно в формате фиксированной ширины.

@ Прасад, вообще ошибка No Schema Set at бросает, когда входной тип MIME не установлен. В вашем случае кажется, что вы имеете дело с данными фиксированной ширины, поэтому вы либо определяете схему фиксированной ширины. эта статья может помочь.

Вместо того, чтобы переходить к dataweave, просто используйте компонент groovy, чтобы разделить полезную нагрузку по новой строке ('\n'). Не используйте файл для преобразования строки, это убивает Java-VM. Также просим кратко рассказать о том, что вам нужно, наконец, достичь в своем вопросе. Ура!

Другие вопросы по тегам