0

Mule 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.scala:42) )

4

4 に答える 4

2

ファイル コネクタでストリーミングを無効にすると、

<object-to-string/>

他の回答で既に述べたように、フラット ファイル スキーマを使用するように DataWeave を構成できます。

この方法で使用したい場合は、正しい MIME タイプを指定する必要があります。この場合は

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 のリストです。

于 2016-08-26T09:33:25.960 に答える
0

dataweave に移動する代わりに、Groovy コンポーネントを使用してペイロードを改行 ('\n') で分割します。file to string トランスフォーマーを使用しないでください。Java-VM が強制終了されます。また、質問で最終的に何を達成する必要があるかを簡単に説明してください。乾杯!

于 2016-08-29T06:41:52.670 に答える