2016-08-26 3 views
0

mule 3.8では、ファイルコネクタを使ってテキストファイルを処理すると、以下のような例外が発生します。muleのプレーンテキストファイルの読み方3.8

java.lang.IllegalStateException: com.mulesoft.weave.moduleではありませんスキーマセットここ

は、フロー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"/> 

例外

ルート例外のスタックトレースです。 flatfile.FlatFileSettings.loadSchema(FlatFileSettings.scala:45) at com.mulesoft.weave.module.flatfile.FlatFileReader.ffParser(FlatFileR eader.scala:42)

答えて

2

ファイル・コネクターにストリーミング無効にすると、あなたはもはやあなたは既に他に言ったように、フラットファイルスキーマを使用するようにDataWeaveを設定することができ

<object-to-string/> 

が必要回答。

あなたがそれをする方法を使用したい場合は、あなたが正しいMIMEタイプを伝える必要があり、この場合には、それはあなたがこのような場合には、DataWeave前に任意のメッセージプロセッサ上でこれを行うことができます

application/java 

ですファイル:インバウンドエンドポイント。または、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の一覧です。

+0

フローXMLを含めるように詳細部分を編集しました。見てください – Prasad

+0

答えがありがとうございました。 – Prasad

0

@Prasad通常、入力MIMEタイプが設定されていない場合のスロー時のエラーNo Schema Setです。あなたの場合、固定幅のデータを扱っているようで、固定幅のスキーマを定義するようです。このarticleが役立つ可能性があります。

+0

答えをありがとう、私はMIMEタイプを追加しました。 – Prasad

0

dataweaveに行くのではなく、新しい行( '\ n')でペイロードを分割するためのグルーヴィーコンポーネントを使用してください。 file to stringトランスフォーマを使用してJava VMを強制終了しないでください。 あなたの質問に最終的に到達するために必要なことも親切にしてください。 乾杯!

1

MIMEタイプ= text/plainを宣言し、トランスフォームメッセージプロセッサの入力ペイロードメタデータをStringに設定しても、DWは非構造化文字列からのマッピングをサポートしていません。

サポートされているデータ形式は、Java、XML、JSON、CSV、フラットファイル、Excel、固定幅、およびCobolのコピーブックです(Mule documentation)。

ここのケースは明らかに固定幅フォーマットです。

+0

DWプロセッサでflowVarを設定していて、入力タイプがStringだったので、これは役に立ちました。そうすれば、「スキーマは設定されていません」例外が発生します。MELでflowVarトランスを使用すると動作します。 –

関連する問題