我调用DSS服务并接收XML然后使用迭代器调解器迭代XML中的标记。在迭代器中,我使用一个富集中介来向XML添加一些XML节点,但每次循环或离开迭代器时,更改都会消失,即使在最后一个循环中,返回的XML也不会保留任何更改。
答案 0 :(得分:3)
迭代调解员就像克隆调解员一样。区别在于它将初始消息拆分为多个片段(它不会复制初始消息)
如果您选择在迭代介体(属性continueParent设置为true)后继续父调解,则会看到初始消息(在迭代发生之前您正在调解的消息)
如果要更改初始消息的内容,必须在迭代或克隆之外使用enrich / XSLT / javascript
答案 1 :(得分:1)
我知道这是一个旧帖子,但我一直在尝试使用迭代器来改变消息有效负载结构一段时间,而且我发现它不是什么&#39 ; s为...而设计。
迭代器用于根据XPATH表达式将消息克隆为较小的消息。在目标序列中,您可以使用消息执行任何操作 - 通常调用另一个Web服务。但是这个消息或多或少地局限于迭代器操作的上下文。一旦迭代器完成它定义的目标序列,它就会废弃该消息,如果你已经表明你希望在迭代完成后继续使用父序列,那么WSO2将会选择旧的默认情况下的消息上下文。
我知道你在想什么 - "该死的,我必须学习新的东西"。这就是为什么我到目前为止大部分都忽略了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介体中引用该键。