2016-07-24 89 views
1

我在3种不同服务的回报中有1..n个对象。我用Scatter-Gather为这三种服务中的每一种打电话。我总变为:如何使用Dataweave删除括号或忽略它们使用Scatter-Gather?

[ 
<?xml version='1.0' encoding='windows-1252'?> 
<policy-group> 
    </policy> 
    </policy> 
</policy-group>, 
<?xml version='1.0' encoding='windows-1252'?> 
<policy-group> 
    </policy> 
    </policy> 
</policy-group>, 
<?xml version='1.0' encoding='windows-1252'?> 
<policy-group> 
    </policy> 
    </policy> 
</policy-group> 
] 

字符串XML消息中的括号引起我的Dataweave错误。有谁知道如何解决这个问题?

我的错误是..

在序言

意外字符 '['(代码91);预计'<' at [row,col {unknown-source}]:[1,1](com.ctc.wstx.exc.WstxUnexpectedCharException)。

在此先感谢。

回答

0

在Scatter-Gather之后添加Combine-Collection,它会将所有结果合并成一个。对于某些情况下,结果未合并时会发生问题。

+0

Sulthony直接做的,它没有工作。我得到了可以记录的XML,但现在它回到了3个BinaryInputStreams和记录器中的限定类名。当我删除Combine Collections时,这一点也持续存在。这真的很难解决。 –

+0

DataWeave的预期输入是什么?所有这三个XML作为单个输入,还是逐一进行? 如果它是单个输入,则在* Scatter-Gather *之后将* Object添加到XML *转换器。它将所有这三个XML包装为一个XML文档。 如果将逐个进行,则在* Scatter-Gather *之后添加*收集分流器*流量控制。它将处理每个XML文档。 –

+0

这是用Message Enricher和Dataweave中的扁平函数解决的 –

0

如果你不想使用变压器或写一些特殊的代码来做到这一点。你可以简单地做像下面

使用表达式成分

<expression-component doc:name="Expression"><![CDATA[ 
message.payload= org.mule.util.StringUtils.removeStart(message.payload,"["); 
message.payload= org.mule.util.StringUtils.removeEnd(message.payload,"]"); 
]]> 
</expression-component> 

,或者可以设置有效载荷

<set-payload value="#[message.payload= org.mule.util.StringUtils.removeStart(message.payload,&quot;[&quot;);message.payload= org.mule.util.StringUtils.removeEnd(message.payload,&quot;]&quot;)]" doc:name="Set Payload"/> 
相关问题