在Mule 4中的流中,我迭代多个文件,从它们获取数据并将它们转换为json。我使用一个并行的ForEach组件来完成这个任务。以下是这两个调用的预期结果:
结果1:
{
"plant": "CD909837289",
"serial": "SRF",
"product": "CMNPSD"
},
{
"plant": "CD909837290",
"serial": "SFG",
"product": "CMNHSA"
}结果2:
{
"plant": "CD909837296",
"serial": "SFG",
"product": "ERTYUI"
},
{
"plant": "CD909837297",
"serial": "SVH",
"product": "SDFGHJ"
}但是,当我调用这些输出时,我还会得到以下消息,其中包含混淆的字符:
��srjava.util.ArrayListx����a�IsizexpwsrRorg.mule.runtime.core.internal.message.DefaultMessageBuilder$MessageImplementationeJ蹨��L
inboundMaptLjava/util/Map;LoutboundMapq~LtypedAttributest*Lorg/mule/runtime/api/metadata/TypedValue;xpsr3org.mule.runtime.api.util.CaseInsensitiveMapWrappervrD=wny3LbaseMapq~xpsrjava.util.HashMap���`�F
loadFactorI thresholdxp?@wxsq~sq~?@wxsr(org.mule.runtime.api.metadata.TypedValue�i�Қ,��LdataTypet(Lorg/mule/runtime/api/metadata/DataType;LvaluetLjava/lang/Object;xpsr6org.mule.runtime.core.internal.metadata.SimpleDataType�Jd�~�Z
streamTypeLmimeTypet)Lorg/mule/runtime/api/metadata/MediaType;LtypetLjava/lang/Class;xpsr'org.mule.runtime.api.metadata.MediaTypeͬU�q�S�ZdefinedInAppLparamsq~LprimaryTypetLjava/lang/String;LsubTypeq~xpsrjava.util.Collections$EmptyMapY6�Z���xpt*q~pxvr/org.mule.extension.file.api.LocalFileAttributesJ�5��Z directoryZregularFileJsizeZsymbolicLinkLcreationTimetLjava/time/LocalDateTime;LlastAccessTimeq~LlastModifiedTimeq~xr9org.mule.extension.file.common.api.AbstractFileAttributes���$pLfileNameq~Lpathq~xpsq~tproduct-date.csvt=/Users/dbien_local/Downloads/DATAFORSCORPION/product-date.csvesr
java.time.Ser�]��"H�xpw
��xsq~!w
�*�xsq~!w
��xw��������xz��[
{
"plant": "CD909837289",
"serial": "SRF",
"product": "CMNPSD"
},
{
"plant": "CD909837290",
"serial": "SFG",
"product": "CMNHSA"
}在每次结果之前,我都会得到同样的信息。我怎样才能摆脱上面的文本,只得到预期的输出?
编辑:下面是流的XML:
<file:config name="File_Config" doc:name="File Config" doc:id="45e5b346-2497-4422-961b-a04bb5a7bf80" >
<file:connection workingDir="/Users/dbien_local/Downloads/DATAFORSCORPION" />
</file:config>
<flow name="get-data-ifFlow" doc:id="8d6b11ec-2a24-49b4-82b4-195816aeb8e5" >
<http:listener doc:name="Listener" doc:id="8937d90f-75f7-43d0-bf20-02f70f9b2073" config-ref="HTTP_Listener_config" path="/data"/>
<parallel-foreach doc:name="Parallel For Each" doc:id="50ca63de-9004-4a52-97f8-9935425c2763" collection='#[["date", "product"]]'>
<file:read doc:name="Read" doc:id="f3fbadf3-2716-47c6-803b-90edefff67a3" config-ref="File_Config" path='#["/Users/dbien_local/Downloads/data/product-" ++ payload ++ ".csv"]' />
<ee:transform doc:name="Transform Message" doc:id="cf7d4f97-2144-4a49-958c-323e26b8b00e">
<ee:message>
<ee:set-payload><![CDATA[%dw 2.0
output application/json
---
payload map ( payload01 , indexOfPayload01 ) -> {
plant: payload01.plant,
serial: payload01.serial,
product: payload01.product
}]]></ee:set-payload>
</ee:message>
</ee:transform>
</parallel-foreach>循环中只有两个组件。一个从csv文件读取数据,然后转换消息组件将其转换为JSON。我完全不知道java消息是从哪里来的。
发布于 2022-03-01 19:34:33
正如Aled所提到的,您正在看到序列化的java对象。您可以在并行后添加一条转换消息,以获得JSON消息。
若要获取有效负载列表,请在转换消息或设置有效负载中使用以下脚本。
%dw 2.0
output application/json
---
payload.payload发布于 2022-03-01 02:28:11
您可以尝试在合并之前更改Payload类型吗?就像这样:
((write(payload.message, "application/json")) 发布于 2022-03-01 12:53:02
您所看到的是Java对象的序列化。因为问题中没有足够的信息来给出更具体的答案,所以我将进行一个有根据的猜测,并假设您看到的是消息或消息列表,而不是您希望看到的有效负载。请记住,与标准foreach不同,并行foreach返回的是消息列表,而不是有效负载列表。消息除了包含属性外,还包含有效负载。。您只需要从列表的每个消息中获取有效负载。
另外,尝试使用Mule 4的最新版本,如果可能的话,使用最新的累积补丁,以避免以前版本中已知的问题。
https://stackoverflow.com/questions/71302581
复制相似问题