在mule 3.8中,当我使用文件连接器处理文本文件时,我得到如下例外情况,请帮忙。
这是flow 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"/>
异常
Root异常堆栈跟踪:
java.lang.IllegalStateException:未设置架构 com.mulesoft.weave.module.flatfile.FlatFileSettings.loadSchema(FlatFileSettings.scala:45) 在 com.mulesoft.weave.module.flatfile.FlatFileReader.ffParser(FlatFileReader.scala:42)
答案 0 :(得分: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列表。
答案 1 :(得分:1)
DW当前不支持从非结构化字符串映射,即使您声明MIME Type = text / plain upstream并且您在Transform Message处理器中将输入有效内容元数据设置为String。
支持的数据格式(根据Mule documentation)是Java,XML,JSON,CSV,平面文件,Excel,固定宽度和Cobol副本。
这里的情况显然是固定宽度格式。
答案 2 :(得分:0)
@Prasad,通常是输入mime类型未设置时抛出的错误No Schema Set
。在您的情况下,您似乎正在处理固定宽度数据,因此您要么定义固定宽度架构。这article可能会有所帮助。
答案 3 :(得分:0)
不使用数据编织,只需使用groovy组件按新行('\ n')拆分有效负载。 不要使用文件到字符串转换器它会杀死Java-VM。 还要简要介绍一下你在问题中最终需要达到的目标。 干杯!