WSO2 ESB在迭代器介体中丰富了介体

时间:2014-08-05 13:46:43

标签: xml wso2 wso2esb wso2dss wso2developerstudio

我调用DSS服务并接收XML然后使用迭代器调解器迭代XML中的标记。在迭代器中,我使用一个富集中介来向XML添加一些XML节点,但每次循环或离开迭代器时,更改都会消失,即使在最后一个循环中,返回的XML也不会保留任何更改。

2 个答案:

答案 0 :(得分:3)

迭代调解员就像克隆调解员一样。区别在于它将初始消息拆分为多个片段(它不会复制初始消息)

如果您选择在迭代介体(属性continueParent设置为true)后继续父调解,则会看到初始消息(在迭代发生之前您正在调解的消息)

如果要更改初始消息的内容,必须在迭代或克隆之外使用enrich / XSLT / javascript

答案 1 :(得分:1)

我知道这是一个旧帖子,但我一直在尝试使用迭代器来改变消息有效负载结构一段时间,而且我发现它不是什么&#39 ; s为...而设计。

迭代器用于根据XPATH表达式将消息克隆为较小的消息。在目标序列中,您可以使用消息执行任何操作 - 通常调用另一个Web服务。但是这个消息或多或少地局限于迭代器操作的上下文。一旦迭代器完成它定义的目标序列,它就会废弃该消息,如果你已经表明你希望在迭代完成后继续使用父序列,那么WSO2将会选择旧的默认情况下的消息上下文。

XSLT to the Rescue

我知道你在想什么 - "该死的,我必须学习新的东西"。这就是为什么我到目前为止大部分都忽略了XSLT的原因 - 我想我可以用Synapse配置语言做所有事情。但是XSLT是严重的炸弹,我建议在W3Schools上查看教程,看看你能做些什么:http://www.w3schools.com/xsl/

XSLT的强大之处在于,在模板中,您可以使用for-each表达式:http://www.w3schools.com/xsl/xsl_for_each.asp

作为该表达式的参数,您可以指定一些XPATH(就像迭代中介一样),除了它实际上将构造消息。

要在ESB中使用XSLT,只需添加一个包含XSLT样式表的本地XML条目,并在XSLT介体中引用该键。