Mule 4管道分隔文本文件到JSON

Mule 4管道分隔文本文件到JSON,json,mule,dataweave,Json,Mule,Dataweave,我需要在Mule 4中将管道分隔的文本文件转换为JSON。我尝试了以下代码 `<file:listener doc:name="Fetch Input from Geometry SFTP" doc:id="1151a602-6748-43b7-b491-2caedf6f7010" directory="C:\Vijay\My Projects\AM-Mexico\US\AIM-65\Input" autoDelete="true" outputMimeType="text/csv; se

我需要在Mule 4中将管道分隔的文本文件转换为JSON。我尝试了以下代码

`<file:listener doc:name="Fetch Input from Geometry SFTP" doc:id="1151a602-6748-43b7-b491-2caedf6f7010" directory="C:\Vijay\My Projects\AM-Mexico\US\AIM-65\Input" autoDelete="true" outputMimeType="text/csv; separator=|" recursive="false">
            <non-repeatable-stream />
            <scheduling-strategy >
                <fixed-frequency frequency="10" timeUnit="SECONDS"/>
            </scheduling-strategy>
        </file:listener>
        <ee:transform doc:name="Transform Message" doc:id="79dcddf9-34a0-4005-88b4-3a395544be8c" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
output application/json
input payload text/csv
---
payload]]></ee:set-payload>
            </ee:message>
        </ee:transform>`
`
`
如果我试图执行代码,我会得到如下异常

Message               : "Internal execution exception while executing the script this is most probably a bug.
Caused by:
java.nio.channels.ClosedChannelException
    at sun.nio.ch.FileChannelImpl.ensureOpen(FileChannelImpl.java:110)
    at sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:147)
    at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:65)
    at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:109)
    at sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:103)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
    at $java.io.InputStream$$FastClassByCGLIB$$31b19c4e.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    at org.mule.extension.file.common.api.stream.AbstractFileInputStream.lambda$createLazyStream$0(AbstractFileInputStream.java:41)
    at $java.io.InputStream$$EnhancerByCGLIB$$55e4687e.read(<generated>)
    at org.apache.commons.io.input.ProxyInputStream.read(ProxyInputStream.java:98)
    at org.mule.weave.v2.io.DefaultSeekableStream.readUntil(SeekableStream.scala:193)
    at org.mule.weave.v2.io.DefaultSeekableStream.delegate$lzycompute(SeekableStream.scala:202)
    at org.mule.weave.v2.io.DefaultSeekableStream.delegate(SeekableStream.scala:201)
    at org.mule.weave.v2.io.DefaultSeekableStream.seek(SeekableStream.scala:234)
    at org.mule.weave.v2.io.SeekableStream.resetStream(SeekableStream.scala:17)
    at org.mule.weave.v2.io.SeekableStream.resetStream$(SeekableStream.scala:16)
    at org.mule.weave.v2.io.DefaultSeekableStream.resetStream(SeekableStream.scala:186)
    at org.mule.weave.v2.model.values.BinaryValue$.getBytesFromSeekableStream(BinaryValue.scala:84)
    at org.mule.weave.v2.model.values.BinaryValue$.getBytes(BinaryValue.scala:68)
    at org.mule.weave.v2.model.values.BinaryValue.equals(BinaryValue.scala:26)
    at org.mule.weave.v2.model.values.BinaryValue.equals$(BinaryValue.scala:25)
    at org.mule.weave.v2.module.pojo.reader.JavaBinaryValue.equals(JavaBinaryValue.scala:11)
    at org.mule.weave.v2.model.values.wrappers.DelegateValue.equals(DelegateValue.scala:38)
    at org.mule.weave.v2.model.values.wrappers.DelegateValue.equals$(DelegateValue.scala:37)
    at org.mule.weave.v2.model.values.wrappers.LazyValue.equals(DelegateValue.scala:65)
    at org.mule.weave.v2.model.types.Type.$anonfun$acceptsSchema$2(Type.scala:203)
    at org.mule.weave.v2.model.types.Type.$anonfun$acceptsSchema$2$adapted(Type.scala:198)
消息:“执行脚本时出现内部执行异常这很可能是一个bug。
原因:
java.nio.channels.ClosedChannel异常
在sun.nio.ch.FileChannelImpl.com上重新打开(FileChannelImpl.java:110)
位于sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:147)
位于sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:65)
位于sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:109)
位于sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:103)
位于java.io.BufferedInputStream.read1(BufferedInputStream.java:284)
在java.io.BufferedInputStream.read处(BufferedInputStream.java:345)
在$java.io.InputStream$$FastClassByCGLIB$$31b19c4e.invoke()处
net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
位于org.mule.extension.file.common.api.stream.AbstractFileInputStream.lambda$createLazyStream$0(AbstractFileInputStream.java:41)
在$java.io.InputStream$$EnhancerByGlib$$55e4687e.read()处
位于org.apache.commons.io.input.ProxyInputStream.read(ProxyInputStream.java:98)
在org.mule.weave.v2.io.DefaultSeekableStream.readUntil上(SeekableStream.scala:193)
在org.mule.weave.v2.io.DefaultSeekableStream.delegate$lzycompute上(SeekableStream.scala:202)
在org.mule.weave.v2.io.DefaultSeekableStream.delegate上(SeekableStream.scala:201)
在org.mule.weave.v2.io.DefaultSeekableStream.seek(SeekableStream.scala:234)
位于org.mule.weave.v2.io.SeekableStream.resetStream(SeekableStream.scala:17)
位于org.mule.weave.v2.io.SeekableStream.resetStream$(SeekableStream.scala:16)
在org.mule.weave.v2.io.DefaultSeekableStream.resetStream(SeekableStream.scala:186)上
在org.mule.weave.v2.model.values.BinaryValue$.getBytesFromSeekableStream(BinaryValue.scala:84)上
位于org.mule.weave.v2.model.values.BinaryValue$.getBytes(BinaryValue.scala:68)
位于org.mule.weave.v2.model.values.BinaryValue.equals(BinaryValue.scala:26)
位于org.mule.weave.v2.model.values.BinaryValue.equals$(BinaryValue.scala:25)
位于org.mule.weave.v2.module.pojo.reader.JavaBinaryValue.equals(JavaBinaryValue.scala:11)
位于org.mule.weave.v2.model.values.wrappers.DelegateValue.equals(DelegateValue.scala:38)
位于org.mule.weave.v2.model.values.wrappers.DelegateValue.equals$(DelegateValue.scala:37)
位于org.mule.weave.v2.model.values.wrappers.LazyValue.equals(DelegateValue.scala:65)
在org.mule.weave.v2.model.types.Type.$anonfun$acceptsSchema$2(Type.scala:203)
在org.mule.weave.v2.model.types.Type.$anonfun$acceptsSchema$2$adapted(Type.scala:198)

非常感谢您对此提供的任何帮助。

您需要设置
分隔符的读取器属性:

%dw 2.0
input payload application/csv separator='|'
output application/json
---
payload

相关文档。

下面的答案应该有效。如果您对@jerney answer满意,请接受。我遇到了类似的问题。这里我的csv作为附件提供。多部分/表单数据。我如何在输入字段中定义分隔符?如果是逗号分隔的,我的dataweave工作正常。如果是管道分隔的,字段将返回无效的